Я не совсем уверен, как логика будет работать над этим. Мой мозг обжарен, и я не могу четко подумать.
Я обрабатываю некоторые данные 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; }