• PHP数组合并:[“+”运算符]、[array_merge]、[array_merge_recursive]区别


    1、“+”运算符
    规则:
      当两个数组的键名是数字键名或者字符串键名
      $c = $a + $b
      在$a后追加($b在$a中不存在的键名)键名和值
    注意:
      1、不覆盖,只是追加不存在的键名和对应的值
      2、键名不重新索引
      3、无论是全部数字键名还是混合,都只是追加键名和值,如果键名相同则不进行追加,即把最先出现的值作为最终结果返回
    例1:数字键名

    $a = array(
        'a',
    );
    $b = array(
        'u',
    );
    $c = $a + $b;
    var_dump($c);
    
    output:
    array(1) {
      [0]=>
      string(1) "a"
    }
    

     例2:数字键名

    $a = array(
        66=>'a',
    );
    $b = array(
        60=>'u',
        66=>'c'
    );
    $c = $a + $b;
    var_dump($c);
    
    output:
    array(2) {
      [66]=>
      string(1) "a"
      [60]=>
      string(1) "u"
    }
    

    例3:字符键名

    <?php  
    $a = array(
        1=>'a',
        2=>'b',
        'c'=>'c',
        'd'=>'d',
    );
    $b = array(
        1=>'u',
        3=>'v',
        'c'=>'w',
        'd'=>'x',
        'y'=>'y',
        60=>'z',
    );
    $c = $a + $b;
    var_dump($c);
    ?>
    
    output:
    array(7) {
      [1]=>
      string(1) "a"
      [2]=>
      string(1) "b"
      ["c"]=>
      string(1) "c"
      ["d"]=>
      string(1) "d"
      [3]=>
      string(1) "v"
      ["y"]=>
      string(1) "y"
      [60]=>
      string(1) "z"
    }
    

     
    2、array array_merge ( array array1 [, array array2 [, array ...]] )
    规则:
      array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
      如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。
      然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
      如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
    注意:
      1、数字索引,不会覆盖,值合并后,键名会连续方式重新索引
      2、字符串键名,则该键名后面的值将覆盖前一个值
    例1:数字键名

    $a = array(
        'a',
    );
    $b = array(
        'u',
    );
    $c = array_merge($a, $b);
    var_dump($c);
    
    output:
    array(2) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "u"
    }
    

     例2:数字键名

    $a = array(
        66=>'a',
    );
    $b = array(
        60=>'u',
        66=>'c'
    );
    $c = array_merge($a, $b);
    var_dump($c);
    
    output:
    array(3) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "u"
      [2]=>
      string(1) "c"
    }
    

    例3:字符键名

    $a = array(
        1=>'a',
        2=>'b',
        'c'=>'c',
        'd'=>'d',
    );
    $b = array(
        1=>'u',
        3=>'v',
        'c'=>'w',
        'd'=>'x',
        'y'=>'y',
        60=>'z',
    );
    $c = array_merge($a, $b);
    var_dump($c);
    
    output:
    array(8) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      ["c"]=>
      string(1) "w"
      ["d"]=>
      string(1) "x"
      [2]=>
      string(1) "u"
      [3]=>
      string(1) "v"
      ["y"]=>
      string(1) "y"
      [4]=>
      string(1) "z"
    }
    

    3、array array_merge_recursive ( array array1 [, array ...] )
      array_merge_recursive() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
      如果输入的数组中有相同的字符串键名,则这些值会被合并到一个数组中去,这将递归下去,因此如果一个值本身是一个数组,本函数将按照相应的条目把它合并为另一个数组。
      然而,如果数组具有相同的数组键名,后一个值将不会覆盖原来的值,而是附加到后面。
    注意:
      1、规则跟array_merge基本相同,只是在处理相同字符键名的时候,采用递归追加
    例1:数字键名

    $a = array(
        'a',
    );
    $b = array(
        'u',
    );
    $c = array_merge_recursive($a, $b);
    var_dump($c);
    
    output:
    array(2) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "u"
    }
    

    例2:数字键名

    $a = array(
        'a',
    );
    $b = array(
        'u',
    );
    $c = array_merge_recursive($a, $b);
    var_dump($c);
    
    output:
    array(2) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "u"
    }
    

    例3:字符键名

    $a = array(
        1=>'a',
        2=>'b',
        'c'=>'c',
        'd'=>'d',
    );
    $b = array(
        1=>'u',
        3=>'v',
        'c'=>'w',
        'd'=>'x',
        'y'=>'y',
        60=>'z',
    );
    $c = array_merge_recursive($a, $b);
    var_dump($c);
    
    output:
    array(8) {
      [0]=>
      string(1) "a"
      [1]=>
      string(1) "b"
      ["c"]=>
      array(2) {
        [0]=>
        string(1) "c"
        [1]=>
        string(1) "w"
      }
      ["d"]=>
      array(2) {
        [0]=>
        string(1) "d"
        [1]=>
        string(1) "x"
      }
      [2]=>
      string(1) "u"
      [3]=>
      string(1) "v"
      ["y"]=>
      string(1) "y"
      [4]=>
      string(1) "z"
    }
    
  • 相关阅读:
    Array
    自底向上的单元测试&&程序设计思想
    如何从 100 亿 URL 中找出相同的 URL?
    个人博客开发之数据库设计
    SpringBoot 优雅整合Swagger Api 自动生成文档
    SpringBoot Validation参数校验 详解自定义注解规则和分组校验
    SpringBoot Validation优雅的全局参数校验
    Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回
    SpringBoot优雅的全局异常处理
    SpringBoot2.4.x整合Mybatis-Plus3.4.x(详细教程)
  • 原文地址:https://www.cnblogs.com/zcy_soft/p/2296081.html
Copyright © 2020-2023  润新知