主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意:
1)键名为数字时,array_merge()后面的值将不会覆盖原来的值,而是附加到后面;但+合并数组则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)
array_merge:合并生成的数组的索引统一从0开始,所以不存在覆盖的情况.
"+"操作符:不改变数字索引,如果索引已经存在,则跳过该元素.
2)键名为字符串时,array_merge()此时会覆盖掉前面相同键名的值,但+仍然把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉(不是覆盖)。
array_merge:如果两个数组存在相同的键,后面的一个会覆盖前面的.
"+"操作符:如果两个数组存在相同的键,前面的一个会覆盖后面的.
需要注意的是数组键形式 '数字' 等价于 数字。
array_merge的情况:
$a = array('one'=>'a', 'two'=>'b'); $b = array('one'=>'c', 'four'=>'d'); $c = array(3=>'m', 7=>'n'); $d = array(3=>'o', 23=>'p'); var_dump(array_merge($a,$b)); var_dump(array_merge($c,$d)); var_dump(array_merge($a,$c));
输出结果:
数组相加 + 时的情况:
$a = array('one'=>'a', 'two'=>'b'); $b = array('one'=>'c', 'four'=>'d'); $c = array(3=>'m', 7=>'n'); $d = array(3=>'o', 23=>'p'); var_dump($a+$b); var_dump($c+$d); var_dump($a+$c);
输出结果:
对多个数组去重技巧:
array_flip() 函数用于反转/交换数组中所有的键名以及它们关联的键值。
$a = array('1001','1002'); $b = array('1002','1003','1004'); $c = array('1003','1004','1005'); $d = array_flip($a) + array_flip($b) + array_flip($c); var_dump($d);
输出结果:
array (size=5)
1001 => int 0
1002 => int 1
1003 => int 1
1004 => int 2
1005 => int 2
最近做一个功能,需求是这样的,一个人可能会有多种类型申请,该类型下又会是可能是多条。这样对后台的批复做一个处理,对该类型下通过的发送一个消息。
思考了一下后,给出了一个如下的处理方案:
1、设置缓存?发一个记一个缓存?再次发送检测缓存? 没必要的吧~
2、合并数据,isset检测? 但是key是数字,多个相同数字key,后者值是会覆盖的啊!
优化:key 在加一个区分类型的标识, 最后只需要通过的时候,使用(数组 + 数组)的方式合并一个数组,这个数组 以 (人标识+申请类型)为key ,下次循环,通过的时候检测 该用户该类型的key是否存在 即可。感觉也有变相缓存的意思哈哈,只不过2行代码搞定~~
本文为崔凯原创文章,转载无需和我联系,但请注明来自冷暖自知一抹茶ckhttp://www.cksite.cn