2017-02-20 7 views
0

У меня есть два варианта выпадающего списка с таким же именем, как показано ниже.Опубликовать многомерный массив в раскрывающемся списке

<form action="" method="post"> 
    <select name="freeoptions[]"> 
     <option value="[7][4]">Black</option> 
     <option value="[7][5]">Blue</option> 
     <option value="[7][3]">Red</option> 
    </select> 


    <select name="freeoptions[]"> 
     <option value="[9][11]">Small</option> 
     <option value="[9][15]">Large</option> 
     <option value="[9][13]">XL</option> 
    </select> 

    <input type="submit" name="submit" value="submit"> 
</form> 

Теперь, когда я отправляю форму, получение почтовых данных в массиве, как,

Array 
(
    [freeoptions] => Array 
     (
      [0] => [7][4] 
      [1] => [9][11] 
     ) 
) 

Но я хочу этот массив что-то вроде

Array 
     (
      [freeoptions] => Array 
      (
       [0] => Array 
       (
         [id] => [7] 
         [value] => [4] 
       ) 
       [1] => Array 
       (
         [id] => [9] 
         [value] => [11] 
       ) 
      ) 
     ) 

Может кто-нибудь, пожалуйста, помогите мне, как это сделать это. Спасибо,

ответ

1

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

Вы всегда можете иметь оба значения в одном значении атрибута и разделить его на заднем конце.

Пример в HTML:

<option value="7;4"></option> 

Затем сделать что-то вроде этого в заднем конце:

$data = []; 

// Loop all freeoptions params 
foreach ($_POST['freeoptions'] as $opt) { 
    // Split the value on or separator: ; 
    $items = explode(';', $opt); 

    if (count($items) != 2) { 
     // We didn't get two values, let's ignore it and jump to the next iteration 
     continue; 
    } 

    // Create our new structure 
    $data[] = [ 
     'id' => $items[0], // Before the ; 
     'value' => $items[1], // After the ; 
    ]; 
} 

$data Теперь -array должен содержать структуру данных, которую вы хотите.

Если вы хотите продолжать использовать $_POST -переменного вместо этого, просто перезаписать исходные данные после Еогеаспа:

$_POST['freeoptions'] = $data; 
+0

Совершенных, спасибо – Hardik

0

Вы хотите отобразить результат с базы данных или вручную?

+0

Хочет, чтобы отобразить вручную – Hardik

+0

Это комментарий, не ответ –