#php #http #forms #multidimensional-array #request
#php #http #формы #многомерный массив #запрос
Вопрос:
Отличной особенностью PHP является то, что он обрабатывает массивы в переменных запроса, поэтому, если вы разместите строку типа ...amp;test[one]=twoamp;test[three]=four
, вы сможете получить доступ test
к массиву с помощью $_REQUEST['test']
.
Однако сегодня я обнаружил, что существует проблема с многомерными $_REQUEST
массивами, и мне интересно, есть ли способ обойти это.
Для тестирования я использовал форму с полями:
<input name="one[one]" />
<input name="one[two]" />
<input name="three[four[five]]" />
<input name="three[four[six]]" />
Как только это было отправлено, я использовал var_dump
для просмотра структуры массива:
array(3) {
["one"]=>
array(2) {
["one"]=>
string(0) ""
["two"]=>
string(0) ""
}
["three"]=>
array(2) {
["four[five"]=>
string(0) ""
["four[six"]=>
string(0) ""
}
}
one
Элемент выполнен в виде массива, как и ожидалось. Но three
элемент таковым не является. Теперь я бы не возражал, если бы это просто не поддерживалось, но меня смутила причина, по которой. Посмотрите на названия подэлементов three
— four[five
и four[six
. Он не интерпретируется как массив, потому что по какой-то причине был потерян завершающий код, ]
который помог бы идентифицировать эти элементы как значения массива!
У кого-нибудь есть объяснение этому? Есть ли какой-либо способ обойти это, кроме как использовать максимум один уровень в $_REQUEST
массивах?
Комментарии:
1. Пожалуйста, прекратите использовать $_REQUEST. Это вредно.
2. @teresko: Пожалуйста, прекратите публиковать это. Это неверно.
Ответ №1:
Вместо этого попробуйте three[four][five]
и three[four][six]
.
Комментарии:
1. Я все еще не понимаю, почему конечная
]
информация удалялась.2. Очевидно, это связано с тем, как PHP анализирует строку. Почему именно, я не знаю. Я не считаю, что стоит тратить время на открытие исходного кода PHP, чтобы выяснить это. Просто используйте правильный формат, а также помните о точках в именах полей. Смотрите php.net/manual/en/language.variables.external.php
Ответ №2:
Входные имена полностью соответствуют переменным «names».
Вы бы написали на PHP:
$three['four']['five'] = 'trees';
Аналогично в вашем HTML:
<input name="three[four][five]" value="trees" />