首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 陣列合併大比拼:+ 運算子 vs array_merge() vs array_merge_recursive() 差異詳解

     編輯:PHP 綜合知識

四大核心差異

特性+ 運算子array_merge()array_merge_recursive()
數字索引處理保留原索引,不重設重設為 0 起始連續索引重設為 0 起始連續索引
字串鍵衝突前者優先,後者被忽略後者覆蓋前者合併為陣列(遞歸)
多陣列合併僅支援兩個支援無限個參數支援無限個參數
巢狀陣列不處理(整體覆蓋/忽略)不處理(整體覆蓋)遞歸合併巢狀結構

實戰測試代碼

$arr1 = array(
    10 => 'valueof10',
    11 => 'valueof11',
    'key1' => 'dataofkey1',
    'key2' => 'dataofkey2',
    'array' => array(
        'key1' => 1,
        'key2' => 'abc',
        'key3' => array(1, 2, 'name' => 'peter')
    )
);

$arr2 = array(
    10 => 'newvalueof10',
    11 => 'newvalueof11',
    'key1' => 'newdataofkey1',
    'key3' => 'newdataofkey3',
    'array' => array(
        'key1' => 2,
        'key2' => 'defg',
        'key3' => array(1, 2, 'name' => 'jonathan', 'gender' => 'male')
    )
);

結果對比

1. $arr1 + $arr2

array(6) {
  10 => 'valueof10'        // 保留 arr1 的數字索引 10
  11 => 'valueof11'        // 保留 arr1 的數字索引 11
  'key1' => 'dataofkey1'   // 字串鍵衝突,arr1 優先
  'key2' => 'dataofkey2'
  'array' => array(...)    // 整體保留 arr1 的巢狀陣列
  'key3' => 'newdataofkey3' // arr2 獨有鍵被加入
}

2. array_merge($arr1, $arr2)

array(8) {
  0 => 'valueof10'         // 數字索引重設為 0,1,2...
  1 => 'valueof11'
  'key1' => 'newdataofkey1' // 字串鍵衝突,arr2 覆蓋
  'key2' => 'dataofkey2'
  'array' => array(...)    // 巢狀陣列被 arr2 整體覆蓋
  2 => 'newvalueof10'      // arr2 的數字索引接在後面
  3 => 'newvalueof11'
  'key3' => 'newdataofkey3'
}

3. array_merge_recursive($arr1, $arr2)

array(7) {
  'key1' => array('dataofkey1', 'newdataofkey1'), // 衝突鍵合併為陣列
  'key2' => 'dataofkey2',
  'array' => array(
    'key1' => array(1, 2),
    'key2' => array('abc', 'defg'),
    'key3' => array(
      array(1,2,'name'=>'peter'),
      array(1,2,'name'=>'jonathan','gender'=>'male')
    )
  ),
  'key3' => 'newdataofkey3',
  0 => 'valueof10', 1 => 'valueof11',
  2 => 'newvalueof10', 3 => 'newvalueof11'
}

選擇建議

  • 需保留數字索引、第一優先:用 +
  • 需重設索引、後者優先:用 array_merge()
  • 需保留衝突值、巢狀深度合併:用 array_merge_recursive()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved