Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP array_merge with numerical keys

How can make it so array_merge() overwrites two keys with different values but same key index from two arrays?

for example, merging:

[0] => 'whatever'

with

[0] => 'whatever', [1] => 'a', [2] => 'b'

should produce

[0] => 'whatever', [1] => 'a', [2] => 'b'

Basically I want array_merge to bahave the same way it behaves if the arrays have string keys...

like image 632
Alex Avatar asked May 08 '11 19:05

Alex


People also ask

What is the difference between Array_merge () and Array_merge_recursive () in PHP?

Definition and Usage The array_merge_recursive() function merges one or more arrays into one array. The difference between this function and the array_merge() function is when two or more array elements have the same key. Instead of override the keys, the array_merge_recursive() function makes the value as an array.

What does the Array_merge () function do?

The array_merge() function merges one or more arrays into one array. Tip: You can assign one array to the function, or as many as you like. Note: If two or more array elements have the same key, the last one overrides the others.

How many parameters does the function Array_merge () accept?

The array_merge() function accepts one or more arrays and returns a new array that contains the elements from the input arrays.


2 Answers

Use the + operator.

Compare array_merge to + operator:

<?php  $a1 = array(0=>"whatever",); $a2 = array(0=>"whatever",1=>"a",2=>"b");  print_r(array_merge($a1,$a2)); print_r($a1+$a2); ?> 

Output:

Array (     [0] => whatever     [1] => whatever     [2] => a     [3] => b ) Array (     [0] => whatever     [1] => a     [2] => b ) 

The + operator still works if your associative array has the numerical keys out-of-order:

<?php  $a1 = array(0=>"whatever",); $a2 = array(1=>"a",0=>"whatever",2=>"b");  print_r(array_merge($a1,$a2)); print_r($a1+$a2); ?> 

Output:

Array (     [0] => whatever     [1] => a     [2] => whatever     [3] => b ) Array (     [0] => whatever     [1] => a     [2] => b ) 

Notice array_merge in this case creates a new key. Not desirable...

like image 97
AJ. Avatar answered Oct 03 '22 11:10

AJ.


array_replace does exactly this!

like image 35
HKandulla Avatar answered Oct 03 '22 10:10

HKandulla