在PHP 中数组的合并与追加问题。
说理论的总是太空洞,要看理论直接参考手册,这里通过例子来直观展示。
$ar = array(
'1' => 'abc',
'g' => 'efg',
);
$arr = array(
'g' => 'tom',
'3' => 'jack',
);
$merge = array_merge($ar, $arr);
var_dump($merge);
使用array_merge, 如果存在同样的非数字key ,那么后面的值将覆盖前面的值。这里的输出结果为:
array(3) {
[0]=>
string(3) "abc"
["g"]=>
string(3) "tom"
[1]=>
string(4) "jack"
}
$arr1 = array(
'1' => 'abc',
'g' => 'efg',
);
$arr2 = array(
'g' => 'tom',
'3' => 'jack',
);
$add = $arr1+ $arr2;
var_dump($add);
使用追加的方式合并数组,如果相同的key,那么后面数组的值去掉,依然保留前面key对应的值。这里的输出结果为:
array(3) {
[1]=>
string(3) "abc"
["g"]=>
string(3) "efg"
[3]=>
string(4) "jack"
}
$arr1 = array(
'a' => 'aaa',
'5' => 'abc',
'b' => 'bbb',
'7' => 'efg',
'c' => 'ccc',
);
$arr2 = array(
'd' => 'dddddd',
'7' => 'tom',
'a' => '0000',
'3' => 'jack',
);
$merge = array_merge($arr1, $arr2);
var_dump($merge);
如果合并数组中key 相同但是同位数字,那么将不会存在覆盖的情况,使用array_merge 后,会对所有的数字key 进行重写。保留原有顺序,key 从0 开始增加。相同的数字key 其值不会覆盖。这里的输出为:
array(8) {
["a"]=>
string(4) "0000"
[0]=>
string(3) "abc"
["b"]=>
string(3) "bbb"
[1]=>
string(3) "efg"
["c"]=>
string(3) "ccc"
["d"]=>
string(6) "dddddd"
[2]=>
string(3) "tom"
[3]=>
string(4) "jack"
}
$arr1 = array(
'a' => 'aaa',
'5' => 'abc',
'b' => 'bbb',
'7' => 'efg',
'c' => 'ccc',
);
$arr2 = array(
'd' => 'dddddd',
'7' => 'tom',
'a' => '0000',
'3' => 'jack',
);
$add = $arr1+ $arr2;
var_dump($add);
这里做的是追加操作,虽然key = 7 在两数组中都是数字key 相同,也有字母相同的key。但是追加操作的意思就是存在的key, 后面的key如果相同,那么只保留前面存在的,后面的将被去掉,这里的输出为:
array(7) {
["a"]=>
string(3) "aaa"
[5]=>
string(3) "abc"
["b"]=>
string(3) "bbb"
[7]=>
string(3) "efg"
["c"]=>
string(3) "ccc"
["d"]=>
string(6) "dddddd"
[3]=>
string(4) "jack"
}
在手册中已经明确,使用“+” 表示将后面数组中的值追加到第一个数组中。也就是说,如果使用 + 的方式来合并两个数组,那么第一个数组的值是不会有任何变化的,但是第二个数组中值的保留情况就需要根据第一个数组的key 来判断了。如果第二个数组中的key 存在与第一个数组中,那么该值就不会出现在最后合并的结果中。