We participate in the Amazon Service LLC Associates Program, an affiliate advertising program designed to provide a means for sites to earn advertising fees by advertising and linking to Amazon.com

Testing your knowledge of array_merge
$arr = array();
$arr['val1'] = array(1, 2);
$arr['val2'] = 3;
$arr['val3'] = array(4, 5);

$arr2 = array();

$arr2 = array_merge($arr2, $arr['val1']);
var_dump($arr2);
$arr2 = array_merge($arr2, $arr['val2']);
var_dump($arr2);
$arr2 = array_merge($arr2, $arr['val3']);
var_dump($arr2);

There’s a problem with this code. It lies in the fact that array_merge will output a null if you give it anything but an array.

$arr['val2'] does not contain an array. Therefore when you merge it, the result will be null, and then the third merge will also result in null because it cascades down from the previous merge in the $arr2 variable.

How do we fix this? Simply typecast the second argument to an array, and you cover any case where the value is not an array:

$arr2 = array_merge($arr2, (array) $arr['val1']);
var_dump($arr2);
$arr2 = array_merge($arr2, (array) $arr['val2']);
var_dump($arr2);
$arr2 = array_merge($arr2, (array) $arr['val3']);
var_dump($arr2);