PHP form validation using arrays
-
12-11-2019 - |
Question
I have the following data that is being processed in a form:
[item][1][supplier_id] = 1
[item][1][territory_id] = 1
[item][1][cost] = 99.99
[item][2][supplier_id] = 2
[item][2][territory_id] = 1
[item][2][cost] = 99.99
[item][3][supplier_id] = 3
[item][3][territory_id] = 2
[item][3][cost] = 99.99
I would like to perform a validation check to satisfy the following:
If the supplier_ids are different I want to make sure the suppliers are from a different territory. Using the above as an example, the form would fail because item[1]
and item[2]
have a supplier from the same territory. If item[2]
was not included the form would validate.
Solution
This should do what you want:
$items[0]["supplier_id"] = 1;
$items[0]["territory_id"] = 1;
$items[0]["cost"] = 99.99;
$items[0]["valid"] = true;
$items[1]["supplier_id"] = 2;
$items[1]["territory_id"] = 1;
$items[1]["cost"] = 99.99;
$items[1]["valid"] = true;
$items[2]["supplier_id"] = 3;
$items[2]["territory_id"] = 2;
$items[2]["cost"] = 99.99;
$items[2]["valid"] = true;
// Loop through all $items (forwards)
for ($i = 0; $i < count($items); $i++) {
// Loop through all $items before $i (backwards)
for ($j = $i-1; $j >= 0; $j--) {
if ($items[$i]["supplier_id"] != $items[$j]["supplier_id"]) {
// Skip
continue;
} elseif ($items[$i]["territory_id"] == $items[$j]["territory_id"]) {
// Invalidate
$items[$j]["valid"] = false;
// Stop looking for matches
break;
}
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow