перемещение количества именованных элементов из одного массива в другой

Я не совсем уверен, как логика будет работать над этим. Мой мозг обжарен, и я не могу четко подумать.

Я обрабатываю некоторые данные POST, и одно из полей этого массива – это количество строк. Я могу прочитать эту строку и определить, нужно ли обрабатывать более одного виджета.

if($quantity <= 1){ //$_POST[widget1] } 

Теперь скажем, что есть 4 виджета. Поле количества будет отражать это число, но как бы я пропустил их и назначил их самому новому массиву?

 $_POST[widget1], $_POST[widget2], $_POST[widget3], $_POST[widget4] 

Как я могу взять это количество чисел и использовать его для захвата многих и тех конкретных именованных элементов из массива post, используя какую-то дикую карту или префикс или что-то еще? Я не знаю, for , или в while , или для какой операции. Как мне пройти через $ _POST ['widget * X *'], где X – мое количество чисел?

Конечным результатом является то, что у меня есть массив, структурированный следующим образом:

 $widgets[data1] $widgets[data2] $widgets[data3] $widgets[data4] 

Используя цикл for , вы можете получить доступ к ключам $_POST с переменной, как в $_POST["widget$i"]

 $widgets = array(); for ($i=1; $i<=$quantity; $i++) { // Append onto an array $widgets[] = $_POST["widget$i"]; } 

Тем не менее, лучшим долгосрочным решением было бы изменить форму HTML, чтобы передать массив обратно на PHP, добавив [] к атрибуту name элемента ввода формы:

 <input type='text' name='widgets[]' id='widget1' value='widget1' /> <input type='text' name='widgets[]' id='widget2' value='widget2' /> <input type='text' name='widgets[]' id='widget3' value='widget3' /> 

Доступ к PHP через $_POST['widgets'] , уже массив!

 var_dump($_POST['widgets']); 

Итерируйте по количеству элементов, по крайней мере, над одним (как вы его описали):

 $widgets = array(); foreach (range(1, max(1, $quantity)) as $item) { $name = sprintf('widget%d', $item); $data = sprintf('data%d', $item); $widget = $_POST[$name]; // do whatever you need to do with that $widget. $widgets[$data] = $widget; }