2013-05-28 4 views
0

У меня есть приложение, где есть 2 начальные поля:Преобразовать сложный массив цикл по каждому элементу

  1. Имя
  2. Цена

форма выглядит следующим образом:

<form> 
<input type="hidden" name="type" value="television" /> 
<label>Name <input type="text" name="name[]" /></label> 
<label>Price <input type="text"" name="price[]" /></label> 
</form> 

в настоящее время пользователь может «добавить больше» полей в форму, которая работает просто отлично. Так, например, если кто-то нажимает на кнопку добавить больше форма выглядит следующим образом:

<form> 
<input type="hidden" name="type" value="television" /> 

<label>Name <input type="text" name="name[]" /></label> 
<label>Price <input type="text"" name="price[]" /></label> 

<label>Name <input type="text" name="name[]" /></label> 
<label>Price <input type="text"" name="price[]" /></label> 
</form> 

И тогда они могут добавить больше имен/цены. Проблема, с которой я сталкиваюсь, заключается в том, что я не могу связать первое поле цены с первым полем имени и так далее и так далее, когда я собираюсь вставить его в БД. Я использую ajax для публикации данных, и это тоже работает отлично.

В настоящее время, когда я var_dump пост массив выглядит следующим образом:

array(3) { 
    ["type"]=> 
    string(10) "television" 
    ["name"]=> 
    array(2) { 
    [0]=> 
    string(8) "name one" 
    [1]=> 
    string(8) "name two" 
    } 
    ["price"]=> 
    array(2) { 
    [0]=> 
    string(9) "price one" 
    [1]=> 
    string(9) "price two" 
    } 
} 

Что мне нужно, это возможность объединить значения массива выглядеть точно так:

array(
    "name" => "name one", 
    "price" => "price one", 
    "type" => "television" 
) 

array(
    "name" => "name two", 
    "price" => "price two", 
    "type" => "television" 
) 

Любая помощь будет будем очень благодарны!

+0

это обычное преобразование массива. Что вы пробовали? – MatRt

ответ

2

, если вы знаете, что каждый name будет иметь price, то вы могли бы использовать key от любого из $_POST array variables создать свой выход.

Примечание: это не будет создавать отдельные массивы, но будет сгруппировать три вместе для более легкого «читаемости»:

$_POST = array(
    "type"=> "television", 
    "name"=> array("name one","name two"), 
    "price"=> array("price one","price two"), 
); 

$output = array(); 
foreach($_POST['name'] as $key=>$name){ 
    $output[$key]['name'] = $name; 
    $output[$key]['price'] = $_POST['price'][$key]; 
    $output[$key]['type'] = $_POST['type']; 
} 
echo '<pre>',print_r($output),'</pre>'; 
+0

'$ _POST [$ key]' это не сработает чувак. вы попробовали свой ответ? Я думаю, что это '$ _POST ['price'] [$ key]' вместо – MatRt

+0

Да, и в вашем примере '$ key' является числовым ключом (0, 1, 2 ..), поэтому' $ _POST [$ key ] 'не даст вам то, что вы хотите – MatRt

+0

У меня был« ключ »назад от имени массива. извиняется. –

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