У меня есть форма, которая построена динамически. Вот вход формы
echo'<input class="input stickyinput" type="number" name="'.$pestname['scoutlogpestname'].'#'.$obj['card_id'].'" >
$pestname['scoutlogpestname']
всегда может быть другим. $obj['card_id']
может быть любым значением от 1 до 1-50
. Я поместил #
в имя, полагая, что мне понадобится разделитель, чтобы взорваться. Массив, который печатает, выглядит следующим образом. Номера для любых введенных значений и пробелы для любых не введенных.
Array ( [Aphids#1] => 11 [Thrips#1] => 5 [White-Fly#1] => 7 [Aphids#2] => [Thrips#2] => 1 [White-Fly#2] => 22 [Aphids#3] => 4 [Thrips#3] => 1 [White-Fly#3] => etc....... possibly to 50 )
Может кто-нибудь, пожалуйста, дайте мне некоторое представление о том, как выполнить цикл $pestname['scoutlogpestname']
чтобы я мог обрабатывать $pestname['scoutlogpestname']
и значения $obj['card_id']
? Спасибо, что посмотрели.
Потеряйте эту странную хэш-вещь и просто используйте нотацию массива в своих полях формы. Например…
<input name="<?= htmlspecialchars($pestname['scoutlogpestname']) ?>[<?= $obj['card_id'] ?>]" ...
Это приведет к чему-то вроде
<input name="Aphids[1]" ... <input name="Aphids[2]" ...
При представлении это даст вам массив массивов в супер-глобальном $_POST
, например
Array ( [Aphids] => Array ( [1] => 11 [2] => ) )
Затем вы можете перебирать каждый элемент и массив значений, например
foreach ($_POST as $pestname => $values) { foreach ($values as $card_id => $value) { // code goes here } }
Если вам нужно итерировать все поля, тогда рассмотрите использование простого foreach и разделите ключи массива на основе «#»:
// eg ['Aphids#1' => 11] foreach ($array as $key => $value) { list($pest_name, $card_id) = explode('#', $key, 2); }
Переменные $pest_name
и $card_id
присваиваются значениям, основанным на результатах операции $card_id
explode()
.
См. Также: list
Тем не менее, сохранение значений как части имени поля таким образом является довольно неуклюжим, и было бы лучше использовать синтаксис массива, например, предложенный Филом в его ответе .
Другой путь:
$array = array("Aphids#1" => 11, "Thrips#1" => 5, "White-Fly#1" => 7, "Aphids#2" => 5, "Thrips#2" => 1, "White-Fly#2" => 22, "Aphids#3" => 4, "Thrips#3" => 1); $data = array(); foreach ($array as $key => $value) { $exploded = explode('#', $key); $obj = array( "pest_name" => $exploded[0], "card_id" => $exploded[1], "value" => $value ); array_push($data, $obj); } echo "<pre>", print_r($data), "</pre>";
Дам тебе:
Array ( [0] => Array ( [pest_name] => Aphids [card_id] => 1 [value] => 11 ) [1] => Array ( [pest_name] => Thrips [card_id] => 1 [value] => 5 ) [2] => Array ( [pest_name] => White-Fly [card_id] => 1 [value] => 7 ) [3] => Array ( [pest_name] => Aphids [card_id] => 2 [value] => 5 ) [4] => Array ( [pest_name] => Thrips [card_id] => 2 [value] => 1 ) [5] => Array ( [pest_name] => White-Fly [card_id] => 2 [value] => 22 ) [6] => Array ( [pest_name] => Aphids [card_id] => 3 [value] => 4 ) [7] => Array ( [pest_name] => Thrips [card_id] => 3 [value] => 1 ) )