• array_merge和array+的区别分析


    记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别

    首先来看看键名是string,两者区别:

    <?php
    $arr1 = array('a'=>'PHP');
    $arr2 = array('a'=>'PYTHON');
    print_r(array_merge($arr1,$arr2)); //Array ( [a] => PYTHON ) 如果键名为字符,且键名相同,array_merge()后面数组元素值会覆盖前面数组元素值
    print_r($arr1+$arr2); //Array ( [a] => PHP )如果键名为字符,且键名相同,数组相加会将最先出现的值作为结果
    
    //再比如
    $arr1 = array('a'=>'1','b'=>'2');
    $arr2 = array('a'=>'1','b'=>'3','c'=>'2');
    $ret = array_merge($arr1,$arr2);
    print_r($ret);//Array ( [a] => 1 [b] => 3 [c] => 2 )
    $ret = $arr1+$arr2;
    print_r($ret);//Array ( [a] => 1 [b] => 2 [c] => 2 )

    如果键名是数字,两者区别:

    <?php
    $arr1 = array("JAVA","PHP");
    $arr2 = array("PYTHON","PHP");
    print_r(array_merge($arr1,$arr2));//Array ( [0] => JAVA [1] => PHP [2] => PYTHON [3] => PHP ) 如果键名为数字,array_merge()不会进行覆盖
    print_r($arr1+$arr2);//Array ( [0] => JAVA [1] => PHP )如果键名为数字,数组相加会将最先出现的值作为结果,后面键名相同的会被抛弃

    //再比如
    $arr1 = array(1=>'1',2=>'2');
    $arr2 = array(1=>'1',2=>'3',8=>'2');

    $ret = array_merge($arr1,$arr2);
    print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 3 [4] => 2 ) 如果数组中的键名为数字时,会格式化键名并保留所有键值。

    //再比如
    $arr1 = array(1,2);
    $arr2 = array(1,2,8);

    $ret = array_merge($arr1,$arr2);
    print_r($ret);//Array ( [0] => 1 [1] => 2 [2] => 1 [3] => 2 [4] => 8 )
    ?>

    特别要注意。关于“array_merge和数组相加的区别”上面已经阐述的很清楚了,回到我最初的问题“如何最有效的获取字符键名相同值不同的两个数组值集合呢”,不会这要对每个数组遍历吧,PHP中还有一个函数:array_merge_recursive

    — 递归地合并一个或多个数组,如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去。如下例:

    <?php
    $arr1 = array("a"=>"PHP","C");
    $arr2 = array("a"=>"JAVA","C","PYTHON");
    print_r(array_merge_recursive($arr1, $arr2)); //Array ( [a] => Array ( [0] => PHP [1] => JAVA ) [0] => C [1] => C [2] => PYTHON )
    ?>
  • 相关阅读:
    GDOI 2020 赛前两周模拟总结
    猫树模板
    LOJ#2023. 「AHOI / HNOI2017」抛硬币(OGF+ExLucas+Crt)
    扩展Lucas定理及其优化
    LOJ#2018. 「AHOI / HNOI2017」单旋(平衡树模拟+set+线段树)
    LOJ #2008. 「SCOI2015」小凸想跑步(半平面交)
    [TJOI2018]游园会
    [Ynoi2018]未来日记
    「雅礼集训 2018 Day7」B
    「雅礼集训 2018 Day7」A
  • 原文地址:https://www.cnblogs.com/phpper/p/9144125.html
Copyright © 2020-2023  润新知