2015-03-26 3 views
1

Как преобразовать этот массив:Преобразование многомерного массива в простой массив рекурсией

$array = [ 
    "order" => [ 
     "items" => [ 
      "6" => [ 
       "ndc" => "This value should not be blank." 
      ], 
      "7" => [ 
       "ndc" => "This value should not be blank." 
      ] 
     ] 
    ] 
]; 

в

$array = [ 
    "order[items][6][ndc]" => "This value should not be blank.", 
    "order[items][7][ndc]" => "This value should not be blank.", 
]; 

Первый массив может иметь неограниченное число уровней вложенности. Так что вложенный foreach не вариант.

Я потратил много времени на поиск решения и ничего не получил. Может, пожалуйста, кто-нибудь мне поможет?

ответ

4

Что-то, как это должно сделать работу:

$newArr = []; 

function reduce_multi_arr($array, &$newArr, $keys = '') { 
    if (!is_array($array)) { 
     $newArr[$keys] = $array; 
    } else { 
     foreach ($array as $key => $val) { 
     if ($keys === '') $nextKey = $key; // first key 
     else $nextKey = '[' . $key . ']'; // next [keys] 
     reduce_multi_arr($val, $newArr, $keys . $nextKey); 
     } 
    } 
} 

reduce_multi_arr($array, $newArr); 

print_r($newArr); 

Выход:

Array 
(
    [order[items][6][ndc]] => 'This value should not be blank.' 
    [order[items][7][ndc]] => 'This value should not be blank.' 
) 
+0

О мой бог. Ты действительно потрясающий. Большое спасибо! – x2df2na

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