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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章