merge是合并的意思,但就array_merge的实际用法,我们理解成追加的意思则更为贴切。
array_merge函数,就是给一个数组,追加其它数组的元素。
既然是追加的含义,自然是原本的数组在前,追加的数组在后了。
1、整型key值的变化规律
2、遇到相同key值,value的变化
3、遇到追加数组是null的情形
下面就通过代码和执行结果来了解array_merge函数的特点。
$main_arr = array(1 =>"hello", 3=>"world"); $add_arr = array("author" => "翟码农", 5=>"sex:male", 4=> "age:30"); $result = array_merge($add_arr, $main_arr); var_dump($result);
结果:
array(5) { ["author"]=> string(9) "翟码农" [0]=> string(8) "sex:male" [1]=> string(6) "age:30" [2]=> string(5) "hello" [3]=> string(5) "world" }
我本以为索引为0的元素,会是age:30这个元素。
由结果可以看出,$main_arr就是追加到$add_arr之后的效果,整型key值重新按赋值顺序生成。
结论:最终数字key值是根据赋值顺序来的,而不是根据原本int型键值大小排序来的
$main_arr = array(1 =>"hello", 3=>"world"); $add_arr = array("author" => "翟码农", 5=>"sex:male", 4=> "age:30"); $result = array_merge($main_arr, $add_arr); var_dump($result);
array(5) { [0]=> string(5) "hello" [1]=> string(5) "world" ["author"]=> string(9) "翟码农" [2]=> string(8) "sex:male" [3]=> string(6) "age:30" }
$main_arr = array(1 =>"hello", 3=>"world"); $add_arr = array("author" => "翟码农", 5=>"sex:male", 4=> "age:30", 3=>"爱生活"); $result = array_merge($main_arr, $add_arr); var_dump($result);
array(6) { [0]=> string(5) "hello" [1]=> string(5) "world" ["author"]=> string(9) "翟码农" [2]=> string(8) "sex:male" [3]=> string(6) "age:30" [4]=> string(9) "爱生活" }
$main_arr = array(1 =>"hello", 'test'=>"world"); $add_arr = array("author" => "翟码农", 5=>"sex:male", 4=> "age:30", 'test'=>"爱生活"); $result = array_merge($main_arr, $add_arr); var_dump($result);
array(5) { [0]=> string(5) "hello" ["test"]=> string(9) "爱生活" ["author"]=> string(9) "翟码农" [1]=> string(8) "sex:male" [2]=> string(6) "age:30" }
结论:只有当数组key值是字符串时,相同key值,追加数组中的元素才会替换原本数组中的元素。
$main_arr = array(1 =>"hello", 3=>"world"); $result = array_merge($main_arr, null); var_dump($result);
Warning: array_merge(): Argument #2 is not an array
NULL
$main_arr = array(1 =>"hello", 3=>"world"); $add_arr = null; $result = array_merge($main_arr, (array)$add_arr);