PHP数组合并函数(+)、array_merge、array_merge_recursive

PHP数组合并函数(+)array_mergearray_merge_recursive

PHP中,有3种方法来进行数组合并:操作符(+)array_mergearray_merge_recursive,其中前两种方式为一维数组的合并,第三种为递归合并。
在说PHP的数组合并之前,先要明白,PHP的数组分为索引数组和关联数组。

  • 索引数组是指没有键值和键值为数字的数组。
  • 关联数组是指键值为字符的数组。
下面说说操作符(+)array_merge的区别:
  1. 当为索引数组时,合并相同键值的数组,操作符以最前面的值为合并后的结果,array_merge则是把相同键值的数组合并,并重新索引(不同键值的数组合并时,也会从0开始重新生成数字索引)。

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

    例1:数字键名

    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_merge则是后面的覆盖前面的。

    $arr5 = array('a'=>'aaaa');
    $arr6 = array('a'=>'bbbb');
    var_dump($arr5+$arr6);
    var_dump(array_merge($arr5,$arr6));
    
    输出:
    array (size=1)
      'a' => string 'aaaa' (length=4)
    array (size=1)
      'a' => string 'bbbb' (length=4)

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

  3. array_merge_recursive的合并规则和array_merge相同,只是array_merge_recursive支持多维数组的合并。

        $a = array(
            1=>'a',
            2=>'b',
            'c'=>'c',
            'd'=>'d',
        );
        $b = array(
            1=>'u',
            3=>'v',
            'c'=>'w',
            'd'=>'x',
            'y'=>'y',
            60=>'z',
        );
        var_dump(array_merge_recursive($a,$b));
    
        输出:
        array (size=8)
            0 => string 'a' (length=1)
            1 => string 'b' (length=1)
            'c' => 
                array (size=2)
                    0 => string 'c' (length=1)
                    1 => string 'w' (length=1)
            'd' => 
                array (size=2)
                    0 => string 'd' (length=1)
                    1 => string 'x' (length=1)
            2 => string 'u' (length=1)
            3 => string 'v' (length=1)
            'y' => string 'y' (length=1)
            4 => string 'z' (length=1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值