今天发现php的数组居然可以直接相加,之前都是用array_merge进行数组的连接操作。
但是试验了一番发现差别还是很大的。
首先是以数字为索引的数组, array_merge会将两个数组按照先后顺序组成一个新的数组
$array1 = array("a", "b", "c");
$array2 = array("d", "e", "f");
// 输出Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f )
var_dump(array_merge($array1, $array2));
// 输出Array ( [0] => d [1] => e [2] => f [3] => a [4] => b [5] => c )
var_dump(array_merge($array2, $array1));
但是如果两个数字索引的数组直接相加的话,两个数组并不会完全保留,而是保存前者
$array1 = array("a", "b", "c");
$array2 = array("d", "e", "f");
// 输出Array ( [0] => a [1] => b [2] => c )
print_r($array1 + $array2);
那么当两个相加的数组大小不一致呢?
$array1 = array("a", "b", "c");
$array2 = array("d", "e", "f");
$array3 = array("g", "h");
// 输出Array ( [0] => d [1] => e [2] => f )
print_r($array2 + $array3);
// 输出Array ( [0] => g [1] => h [2] => f )
print_r($array3 + $array2);
可以见到两个以数字为索引的数组相加后的大小是取决于最大的数组,当第一个数组的大小不够时会从后面的数组对应位置取值补充
当数组是以字符串为索引时,array_merge对于相同的key会进行替换,后者取代前者,对于没有重复的key会按顺序进行拼接
$array1 = array("a" => 1, "b" => 1, "d" => 1);
$array2 = array("a" => 2, "b" => 2, "c" => 2);
// 输出Array ( [a] => 2 [b] => 2 [d] => 1 [c] => 2 )
print_r(array_merge($array1, $array2));
如果是相加的话,规则和array_merge类似,但对于相同的key的值是以前者为准
$array1 = array("a" => 1, "b" => 1, "d" => 1);
$array2 = array("a" => 2, "b" => 2, "c" => 2);
// Array ( [a] => 1 [b] => 1 [d] => 1 [c] => 2 )
print_r($array1 + $array2);
欢迎访问我的个人博客