Принятие там является 5 исходными данными в веб-форме
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
<input name='the_same[]' value='different' />
Когда сторона сервера получает данные сообщения, я использую foreach, чтобы принять данные, сказать
$the_same = new array();
foreach($_POST['the_same'] as $data)
$the_same[] = $data;
Будет порядок данных, сохраненных в стороне сервера быть тем же к нему в веб-форме? и перекрестные браузеры, это могли быть критерии, за которыми следуют все браузеры.
Что ж, рекомендация W3C для форм HTML действительно говорит:
Имена / значения элементов управления перечислены в {{1} } порядок их появления в документе.
Тем не менее, я считаю немного рискованным, чтобы ваше приложение критически зависело от этой детали.
Если вы измените имя своего ввода на the_same []
- $ _ REQUEST ['the_same']
станет массивом этих значений, начиная с конца в порядке элементов (мне кажется, во всех текущих браузерах).
Вы также можете указать конкретный порядок, если вам нужно, или даже использовать строковые ключи. Например,
станет $ _ REQUEST ['the_same'] ['apple'] [2]
Без использования []
в именах входов, PHP увидит только последнее значение . Другие значения будут «перезаписаны» более поздним значением при построении массивов $ _ REQUEST
/ $ _ GET
/ $ _ POST
.
Примером использования этого в ваших интересах может быть флажок, так как флажок HTML отправляет значение только при установленном флажке, вы можете отправить значение «не проверено» somtime:
<input type='hidden' name='check' value='not checked' />
<input type='checkbox' name='check' value='checked' />
, если вы хотите, чтобы это было в порядке, вы можете использовать динамические переменные или просто явно получить доступ к массиву
the_same1 the_same2 the_same3
, поскольку вы все равно знаете имена , вы можете легко получить к ним доступ
$the_same = array();
for($i=1; ; $i++){
$tmp =$_REQUEST["the_same".$i]
if( empty($tmp) ){
// no more stuff
break;
}
$the_same[] = $tmp;
}
Скорее всего, да, но вам не следует предполагать это. Это зависит от вашего браузера, как отправляются входные данные, и, кроме того, PHP не гарантирует, что цикл foreach повторяется в том же порядке, в котором были добавлены элементы.
Давать вашим входным материалам одно и то же имя - плохая практика.
Вы можете добавить индекс после каждого значения имени (даже с помощью javascript, если хотите), а затем прочитать это в PHP, чтобы убедиться, что порядок сохраняется.
PHP уже обрабатывает преобразование переменных POSTed / GETed в массивы, когда вы помещаете []
после имени. Сделайте это вместо того, чтобы самому ошибиться.
Лучше сделать в html:
<input name='the_same[]' value='different' />
Затем в сервере:
$the_same = new array();
foreach($_POST['the_same'] as $data) // or $_GET if you prefer
$the_same[] = $data;
Таким образом ни одна переменная не будет перезаписана.