2014-09-06 4 views
1

У меня есть несколько arrays, и я пытаюсь их использовать merge. Представьте следующий код;Объединить ассоциативный массив PHP

$arr1[ 'a' ] = array('a', 'b', 'c'); 
$arr2[ 'a' ] = array('d', 'e', 'f'); 
$arr3[ 'a' ] = array('g', 'h', 'i'); 

$arr1[ 'b' ] = array('a', 'b', 'c'); 
$arr2[ 'b' ] = array('d', 'e', 'f'); 
$arr3[ 'b' ] = array('g', 'h', 'i'); 

$buf = array_merge($arr1, $arr2, $arr3); 
print_r($buf); 

Результат, которого я ожидаю;

Array 
(
    [a] => Array 
    (
     [ 0 ] => a 
     [ 1 ] => b 
     [ 2 ] => c 
     [ 3 ] => d 
     [ 4 ] => e 
     [ 5 ] => f 
     [ 6 ] => g 
     [ 7 ] => h 
     [ 8 ] => i 
    ) 

    [b] => Array 
    (
     [ 0 ] => a 
     [ 1 ] => b 
     [ 2 ] => c 
     [ 3 ] => d 
     [ 4 ] => e 
     [ 5 ] => f 
     [ 6 ] => g 
     [ 7 ] => h 
     [ 8 ] => i 
    ) 
) 

Я попытался с помощью array_merge() и array_combine() без успеха. Надеюсь, кто-то может помочь.

ответ

4

Использование:

$buf = array_merge_recursive($arr1, $arr2, $arr3);

+0

Просто красиво. – KaekeaSchmear

2

Что-то вроде этого:

<?php 
$arr1[ 'a' ] = array('a', 'b', 'c'); 
$arr2[ 'a' ] = array('d', 'e', 'f'); 
$arr3[ 'a' ] = array('g', 'h', 'i'); 

$arr1[ 'b' ] = array('a', 'b', 'c'); 
$arr2[ 'b' ] = array('d', 'e', 'f'); 
$arr3[ 'b' ] = array('g', 'h', 'i'); 

$array = [ 
    'a' => array_merge($arr1['a'], $arr2['a'], $arr3['a']), 
    'b' => array_merge($arr1['b'], $arr2['b'], $arr3['b']) 
]; 

var_dump($array); 
+0

Мне нравится это решение, но оно не будет масштабироваться вообще - вам нужно будет добавлять уровни к вашему '$ массиву каждый раз, когда добавляется ключ, или создайте цикл, чтобы сделать это. PHP [встроенные функции] (http://php.net/array_merge_recursive) почти всегда побеждают пользовательскую логику. –

+0

@scrowler Я узнал что-то сегодня! thx – mpgn

1

array_merge() только выглядит один уровень вглубь массивов. Вы должны использовать array_merge_recursive() для this:

$buf = array_merge_recursive($arr1, $arr2, $arr3); 
0

$ arr1 [ 'а'] = массив ('а', 'б', 'с');

$ arr2 ['a'] = array ('d', 'e', ​​'f');

$ arr3 ['a'] = массив ('g', 'h', 'i');

$ arr1 ['b'] = массив ('a', 'b', 'c');

$ arr2 ['b'] = массив ('d', 'e', ​​'f');

$ arr3 ['b'] = массив ('g', 'h', 'i');

$ = массив массив (

'a' => array_merge($arr1['a'], $arr2['a'], $arr3['a']), 
'b' => array_merge($arr1['b'], $arr2['b'], $arr3['b']) 

);

print_r ($ array);

+0

Это по существу тот же ответ, что и [этот] (http://stackoverflow.com/a/25704359/2812842), который был отправлен 30 минут назад –

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