взрывать и обрабатывать динамические массивы php

У меня есть форма, которая построена динамически. Вот вход формы

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 ) )