2010-09-27 6 views
0

У меня есть массив следующим образомPhp объединить многомерный массив

array (A => 1) 
array (A => 1, B=>2) 
array (A => 1, B=>2, C=>3) 
array (A => 1, D=>4) 
array (A => 1, E=>5) 
array (A => 1, F=>6) 
array (A => 1, F=>6, G=>8) 
array (A => 1, F=>6, H=>9) 
array (X => 11) 
array (X => 11, Y=22) 
array (X => 11, Z=33) 

мне нужно сформировать массив следующим

array(A=>array(B=>2, C=>3, D=>4, E=>5, F=>array(G=>8,H=>9)) 
    X=>array(Y=>22, Z=>33) 
+2

Что такое правило за этим? – Gumbo

+0

Вы ищете какую-то функцию, которая делает то, что вы ищете? –

+0

Да. Я ищу функцию. – Rahul

ответ

0

Я думаю, это то, что вы ищете:

$result = array(); 
foreach ($arrays as $array) { 
    $ref = &$result; 
    foreach ($array as $key => $val) { 
     if (!isset($ref[$key])) { 
      $ref[$key] = $val; 
     } elseif (!is_array($ref[$key])) { 
      $ref[$key] = array(); 
     } 
     $ref = &$ref[$key]; 
    } 
} 

Здесь ключи интерпретируются как сегменты пути для перемещения массива с использованием ссылки. Если значения еще нет, значение сохраняется; если уже есть значение, оно заменяется массивом.

Но это порождает немного другой результат:

array (
    'A' => 
    array (
    'B' => 
    array (
     'C' => 3, 
    ), 
    'D' => 4, 
    'E' => 5, 
    'F' => 
    array (
     'G' => 8, 
     'H' => 9, 
    ), 
), 
    'X' => 
    array (
    'Y' => 22, 
    'Z' => 33, 
), 
) 
+1

should'nt это рекурсивный? –

+0

где A => 1, x = 11? –

+0

@JapanPro: Где находится ожидаемый результат в вопросе? – Gumbo

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