Thursday, May 24, 2012

When to use array_merge and union operator (+) in PHP?


array_merge

Use array_merge when you want to merge indexed arrays without keys:

<?php
$fruits = array('apples', 'oranges');
$more_fruits = array('bananas', 'mangoes');
$all_fruits = array_merge($fruits, $more_fruits);
print_r($all_fruits);
?>
view raw gistfile1.aw hosted with ❤ by GitHub

Output:
Array
(
[0] => apples
[1] => oranges
[2] => bananas
[3] => mangoes
)
view raw gistfile1.txt hosted with ❤ by GitHub


Array Union Operator (+)


Use the union operator when you want to extend an array or override certain key values. A good use case for this is overriding/extending a default settings array with a user defined array (similar to how you would use $.extend while writing a jQuery plugin):

<?php
$default_settings = array('page'=>3, 'per_page'=>100);
$user_override = array('per_page'=>50, 'format'=>'json');
$overriden_setting = $user_override + $default_settings;
print_r($overriden_setting);
?>
view raw gistfile1.aw hosted with ❤ by GitHub

Output:
Array
(
[per_page] => 50
[format] => json
[page] => 3
)
view raw gistfile1.txt hosted with ❤ by GitHub



References


1 comment:

Anonymous said...

I find this confusing:

$default_settings = array('page'=>3, 'per_page'=>100);
$user_override = array('per_page'=>50, 'format'=>'json');
$overriden_setting = $user_override + $default_settings;

I would rather write either:

$default_settings = array('page'=>3, 'per_page'=>100);
$user_override = array('per_page'=>50, 'format'=>'json');
$overridden_settings = array_merge($default_settings, $user_override);

or:

$minimal_settings = array('page'=>3, 'per_page'=>100);
$user_provided = array('per_page'=>50, 'format'=>'json');
$completed_settings = $user_provided + $minimal_settings;