2010-05-04 2 views
1

Каждый div с классом «строка» добавляется по запросу пользователя, чтобы иметь возможность добавлять сразу несколько элементов. Итак, теперь возникает вопрос, как я буду собирать все формы в массив, который может читать PHP (например, JSON). Я предполагаю, что есть уже простой и эффективный способ сделать это?Соберите определенные поля в массив

<div class="container"> 
    <div class="row"> 
     <input type="text" name="value1" id="textfield" /> 
     <input type="text" name="value2" id="textfield" /> 
     <input type="text" name="value3" id="textfield" /> 
    </div> 

</div> 

Вот что я хотел бы достичь из показанного примера:

array( 
    array ('value1' => '', 
      'value2' => '', 
      'value3' => '') 
); 

Спасибо!

Обновление: Форма будет обрабатываться с помощью PHP, и было бы супер, чтобы иметь возможность делать что-то вроде цикла foreach для конкретного содержимого контейнера-div.

+0

Из ответов дали (включая меня) , Я не уверен, хотите ли вы собирать переменные в jquery или в php (как только форма будет опубликована) –

+0

Извините за это, уточните сообщение. – Industrial

ответ

5

Раздайте «группы» входов и то же имя, а затем добавить квадратные скобки в конце

<div class="container"> 
    <div class="row"> 
     <input type="text" name="value1[]" id="textfield" /> 
     <input type="text" name="value2[]" id="textfield" /> 
     <input type="text" name="value3[]" id="textfield" /> 
    </div> 
    <div class="row"> 
     <input type="text" name="value1[]" id="textfield" /> 
     <input type="text" name="value2[]" id="textfield" /> 
     <input type="text" name="value3[]" id="textfield" /> 
    </div> 
</div> 

Когда вы размещаете форму, переменная PHP $_POST будет содержать массивы value1, value2 и value2:

var_dump($_POST); // array('value1' = array(... 

Вы можете перебирать до «перегруппировать» строк в PHP (но сначала, я бы изменить имена полей FIELD1 и т.д., а не значению1):

$rows = array(); // set up an empty array to hold your rows 

// loop through each POST var 
foreach($_POST AS $key=>$field) { 
    if(is_array($field)) { 
     foreach($field AS $rowIndex=>$fieldValue) { 
      $rows[$rowIndex][$field] = $fieldValue; // put the value in a the array by row, field 
     } 
    } 
} 

var_dump($rows); 

Это дало бы:

array(
    [0] => array(
     'field1' => 'value1', 
     'field2' => 'value2', 
     'field3' => 'value3' 
    ), 
    [1] => array(
     'field1' => 'value1', 
     'field2' => 'value2', 
     'field3' => 'value3' 
    ), 
    ... 
) 
+0

Привет, Адам. Как я могу узнать с PHP-страницы, какие массивы размещены? Из того, что я вижу, каждая «строка» не будет сгруппирована? – Industrial

+1

@ Индустриальные - строки сгруппированы по индексу каждого массива (начиная с 0). Я обновлю свой ответ –

+0

Я имею в виду, что каждая строка сгруппирована, но я хотел бы собрать все строки в один большой массив, чтобы я мог делать foreach в PHP на большом массиве. – Industrial

0
<div class="container"> 
    <div class="row"> 
     <input type="text" name="value[0][value1]" class="textfield" /> 
     <input type="text" name="value[0][value2]" class="textfield" /> 
     <input type="text" name="value[0][value3]" class="textfield" /> 
    </div> 
    <div class="row"> 
     <input type="text" name="value[1][value1]" class="textfield" /> 
     <input type="text" name="value[1][value2]" class="textfield" /> 
     <input type="text" name="value[1][value3]" class="textfield" /> 
    </div> 
</div> 

Изменен идентификатор класса, повторное использование и тот же идентификатор является недействительным HTML.

+0

Спасибо, я знаю об этом, но упустил это, когда собрал пример в моем оригинальном посте. – Industrial

+0

Я имею в виду, я ответил на ваш вопрос * и * изменил идентификатор на класс :) Проверьте имена элементов, они дадут желаемый эффект. – Tgr

Смежные вопросы