PHP中两个数组合并可以使用+或者array_merge 区别

        主要区别是两个或者多个数组中如果出现相同键名,键名分为字符串或者数字,需要注意:

        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));

输出结果:

冷暖自知一抹茶ck

数组相加 + 时的情况:

$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);

输出结果:

冷暖自知一抹茶ck



        对多个数组去重技巧:

        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行代码搞定~~

冷暖自知一抹茶ck
请先登录后发表评论
  • 最新评论
  • 总共0条评论