Intereting Posts

Объедините два массива

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

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 ) ); 

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

Related of "Объедините два массива"

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

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

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

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

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

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

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

 $output = $array1 + $array2; 

https://ideone.com/Jqhbk

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

 $output = $array1 + $array2; 

Вы должны принять во внимание, что $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' ); 

Чтобы сделать это, вы можете перебрать один и добавить к другому:

 <?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)); ?> 

UPDATE: KingCrunch разработал лучшее решение : print_r($array1+$array2);

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

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

Предупреждение! $ 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

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