Обработка input с одинаковыми именами в php

Иногда есть необходимость обработать значения input с одинаковым атрибутом name. Такое может случиться, когда, к примеру, однотипные элементы формы добавляются динамически. 

Допустим, у нас есть два input (они располагаются в форме - внутри тега form):

<form method="post" action="index.php">
<input type="text" name="name[]" value="Книга" />
<input type="text" name="price[]" value="1" />

<input type="text" name="name[]" value="Печенье" />
<input type="text" name="price[]" value="2" />

<input type="submit" name="submit" value="Отправить" />
</form>

В данном примере конечно проще всего было бы дать input разные названия, но сейчас код максимально упрощен. Допустим у нас элементы input создались на форме динамически с помощью скриптов. 

 

Нам на стороне PHP после отправки формы нужно считать значения value. 

PHP код:

if(isset($_POST['submit'])){
$nameArray = $_POST['name'];
$priceArray = $_POST['price'];

if(!empty($nameArray)){
for($i = 0; $i < count($nameArray); $i++){
if(!empty($nameArray[$i])){
$name = $nameArray[$i];
$price = $priceArray[$i];

// тут обрабатываем значения ...

}
}
}
}

Пояснения: 

В данном цикле годится считывать и name и price только в том случае, если кол-во input и того и того совпадает. Если оно не совпадает - то необходимо 2 разных цикла. 

Также возможный подводный камень: если name  будет пустым, а price  - нет, то цикл не сработает (так что подходит только если заполнение полей и там и там обязательно, иначе - лучше отдельные циклы). Так что более правильный вариант будет такой:


if(isset($_POST['submit'])){
$nameArray = $_POST['name'];
$priceArray = $_POST['price'];



//получаем все name
if(!empty($nameArray) && count($nameArray) > 0){
foreach ($nameArray as $name){
var_dump($name);
}
}


//получаем все price
if(!empty($priceArray) && count($priceArray) > 0){
foreach ($priceArray as $price){
var_dump($price);
}
}
}

 

Комментарии

Комментариев пока нет, вы можете оставить свой: