Нет ничего плохого в вашем foreach
. Что-то не так с вашим пониманием того, как PHP анализирует атрибуты ввода (_POST, _GET).
<input type="text" name="foobar" value="one">
<input type="text" name="foobar" value="two">
<input type="text" name="foobar" value="three">
переводит к application/x-www-form-urlencoded представления foobar=one&foobar=two&foobar=three
.
PHP анализирует эту строку на карте (ассоциативный массив). Он делает это несколько как следующий код:
<?php
$_GET = array();
$string = 'foobar=one&foobar=two&foobar=three';
$parts = explode('&', $string);
foreach ($parts as $part) {
$p = explode('=', $part);
$_GET[urldecode($p[0])] = urldecode($p[1]);
}
Так в основном это назначение $_GET['foobar']
три раза, в результате чего $_GET['foobar'] === 'three'
.
Переведенный, это то, что происходит здесь:
$_GET['foobar'] = 'one';
$_GET['foobar'] = 'two';
$_GET['foobar'] = 'three';
В этот момент я хотел бы отметить, что другие языки (Ruby, Java, ...) иметь дело с этим совсем по-другому. Ruby, например, распознает повторяющийся ключ и строит что-то похожее на $_GET['foobar'] = array('one', 'two', 'three')
.
Существует простой «трюк», чтобы сказать, что PHP повторяющееся значение должно быть разобрано в массив:
<input type="text" name="foobar[]" value="one">
<input type="text" name="foobar[]" value="two">
<input type="text" name="foobar[]" value="three">
приведет к $_GET['foobar'] = array('one', 'two', 'three')
;
Переведенный, это то, что происходит здесь:
$_GET['foobar'][] = 'one';
$_GET['foobar'][] = 'two';
$_GET['foobar'][] = 'three';
(Примечание: $array[] = 'value'
такая же, как array_push($array, 'value')
)
Поэтому, когда вы имеете дело с повторением ключевых имен (или <select multiple>
) вы хотите для добавления []
к имени, поэтому PHP строит массив из него.
Вы также можете знать, что вы можете указать массив ключей:
<input type="text" name="foobar[hello][world]" value="one">
приведет к $_GET['foobar']['hello']['world'] == 'one'
.
Ваше сообщение dont habe menuItems entry! опубликовать вывод 'print_r ($ _ POST);' – silly
или $ _POST ['menuItems'] не является массивом. – Gryphius