Array-Merge на ассоциативном массиве в PHP

Как я могу сделать array_merge в ассоциативном массиве, например:

Массив 1:

$options = array ( "1567" => "test", "1853" => "test1", ); 

Массив 2:

 $option = array ( "none" => "N/A" ); 

Так мне нужно array_merge эти два, но когда я это сделаю (в отладке):

 Array ( [none] => N/A [0] => test [1] => test1 ) 

попробуйте использовать:

$ finalArray = $ options + $ option .see http://codepad.org/BJ0HVtac Просто проверьте поведение для дубликатов ключей, я не тестировал это. Для уникальных клавиш он отлично работает.

 <?php $options = array ( "1567" => "test", "1853" => "test1", ); $option = array ( "none" => "N/A" ); $final = array_merge($option,$options); var_dump($final); $finalNew = $option + $options ; var_dump($finalNew); ?> 

Просто используйте $options + $option !

 var_dump($options + $option); 

выходы:

 array(3) { [1567]=> string(4) "test" [1853]=> string(5) "test1" ["none"]=> string(3) "N/A" } 

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

Клавиши из первого массива будут сохранены. Если в обоих массивах существует ключ массива, тогда будет использоваться элемент из первого массива, и элемент совпадающего ключа из второго массива будет проигнорирован.

Я пытался объединить два ассоциативных массива вместе, добавляя значения вместе, если ключи были одинаковыми. Если бы были уникальные ключи для любого массива, они бы были добавлены в объединенный массив с их существующими значениями.

Я не мог найти функцию для этого, поэтому сделал следующее:

 function array_merge_assoc($array1, $array2) { if(sizeof($array1)>sizeof($array2)) { echo $size = sizeof($array1); } else { $a = $array1; $array1 = $array2; $array2 = $a; echo $size = sizeof($array1); } $keys2 = array_keys($array2); for($i = 0;$i<$size;$i++) { $array1[$keys2[$i]] = $array1[$keys2[$i]] + $array2[$keys2[$i]]; } $array1 = array_filter($array1); return $array1; } 

Ссылка: http://www.php.net/manual/en/function.array-merge.php#90136

 $final_option = $option + $options; 

когда array_merge не работает, просто выполните

 <?php $new = array(); foreach ($options as $key=>$value) $new[$key] = $value; foreach ($option as $key=>$value) $new[$key] = $value; ?> 

или переключить две линии foreach зависимости от того, какой массив имеет более высокий приоритет

Этот код может использоваться для рекурсивного слияния:

 function merge($arr1, $arr2){ $out = array(); foreach($arr1 as $key => $val1){ if(isset($arr2[$key])){ if(is_array($arr1[$key]) && is_array($arr2[$key])){ $out[$key]= merge($arr1[$key], $arr2[$key]); }else{ $out[$key]= array($arr1[$key], $arr2[$key]); } unset($arr2[$key]); }else{ $out[$key] = $arr1[$key]; } } return $out + $arr2; } с function merge($arr1, $arr2){ $out = array(); foreach($arr1 as $key => $val1){ if(isset($arr2[$key])){ if(is_array($arr1[$key]) && is_array($arr2[$key])){ $out[$key]= merge($arr1[$key], $arr2[$key]); }else{ $out[$key]= array($arr1[$key], $arr2[$key]); } unset($arr2[$key]); }else{ $out[$key] = $arr1[$key]; } } return $out + $arr2; } 

Если массивы, имеющие одинаковые ключи, используют array_merge_recursive()

 $array1 = array( "a" => "1" , "b" => "45" ); $array2 = array( "a" => "23" , "b" => "33" ); $newarray = array_merge_recursive($array1,$array2); 

array_merge_recursive() перезаписывает, он просто делает значение как массив.