У меня есть два массива:
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 ) );
Любое решение?
Просто используйте:
$output = array_merge($array1, $array2);
Это должно решить. Поскольку вы используете строковые ключи, если один ключ встречается более одного раза (например, '44'
в вашем примере), один ключ перезаписывает обрабатывающие одноименные имена. Потому что в вашем случае они оба имеют одинаковое значение, в любом случае это не имеет значения, и он также удалит дубликаты.
Обновление: я только понял, что PHP обрабатывает числовые строковые ключи как числа (целые числа), и поэтому будет вести себя так, что означает, что он также пересматривает ключи …
Обходной путь заключается в воссоздании ключей.
$output = array_combine($output, $output);
Обновление 2: я всегда забываю, что есть также оператор (выделен жирным шрифтом, потому что это действительно то, что вы ищете!) D)
$output = $array1 + $array2;
Это работает:
$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
Он отлично работает . Надеюсь, что это поможет.