Объединить два массива - PullRequest
69 голосов
/ 30 июня 2011

У меня есть два таких массива:

array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

array( 
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

Я хочу объединить эти два массива так, чтобы они не содержали дубликатов, а также сохранить их оригинальные ключи.Например, вывод должен быть:

array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);

Я пробовал это, но он меняет свои оригинальные ключи:

$output = array_unique( array_merge( $array1 , $array2 ) );

Любое решение?

Ответы [ 6 ]

134 голосов
/ 30 июня 2011

Просто используйте:

$output = array_merge($array1, $array2);

Это должно решить это. Поскольку вы используете строковые ключи, если один ключ встречается более одного раза (например, '44' в вашем примере), один ключ будет перезаписывать исходящие с тем же именем. Потому что в вашем случае они оба имеют одинаковое значение в любом случае, это не имеет значения, и это также удалит дубликаты.

Обновление: я только что понял, что PHP обрабатывает числовые строковые ключи как числа (целые числа) и поэтому будет вести себя так, что означает, что он также перенумеровывает ключи ...

Обходной путь - воссоздать ключи.

$output = array_combine($output, $output);

Обновление 2: я всегда забываю, что есть оператор (выделен жирным шрифтом, потому что это действительно , что вы ищете!: D)

$output = $array1 + $array2;

Все это можно увидеть в: http://php.net/manual/en/function.array-merge.php

30 голосов
/ 26 октября 2012

Следует учитывать, что $array1 + $array2 != $array2 + $array1

$array1 = array(
'11' => 'x1',
'22' => 'x1' 
);  

$array2 = array(
'22' => 'x2',
'33' => 'x2' 
);

с $ array1 + $ array2

$array1 + $array2 = array(
'11' => 'x1',
'22' => 'x1',
'33' => 'x2'
);

и с $ array2 + $ array1

$array2 + $array1 = array(  
'11' => 'x1',  
'22' => 'x2',  
'33' => 'x2'  
);
24 голосов
/ 30 июня 2011

Это работает:

$output = $array1 + $array2;
4 голосов
/ 30 июня 2011

Для этого вы можете перебрать одно и добавить другое:

<?php

$test1 = array( 
'11' => '11',
'22' => '22',
'33' => '33',
'44' => '44'
);

$test2 = array( 
'44' => '44',
'55' => '55',
'66' => '66',
'77' => '77'
);


function combineWithKeys($array1, $array2)
{
    foreach($array1 as $key=>$value) $array2[$key] = $value;
    asort($array2);
    return $array2;
} 

print_r(combineWithKeys($test1, $test2));

?>

ОБНОВЛЕНИЕ: KingCrunch предложил лучшее решение : print_r($array1+$array2);

1 голос
/ 21 ноября 2017

Внимание! $ array1 + $ array2 перезаписывает ключи, поэтому мое решение (для многомерных массивов) заключается в использовании array_unique ()

array_unique(array_merge($a, $b), SORT_REGULAR);

Примечание:

5.2.10 + Изменено значение по умолчанию sort_flags обратно на SORT_STRING.

5.2.9 По умолчанию SORT_REGULAR.

5.2.8- По умолчанию SORT_STRING

Это отлично работает . Надеюсь, это поможет так же.

1 голос
/ 30 июня 2011

Это работает:

$a = array(1 => 1, 2 => 2, 3 => 3);
$b = array(4 => 4, 5 => 5, 6 => 6);
$c = $a + $b;
print_r($c);
...