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

PHP 陣列合併運算子 (+) 完整解析與實戰技巧

     編輯:PHP 相關知識

在 PHP 開發中,陣列操作是最基礎也最常用的技能之一。其中陣列合併運算子 + 雖然語法簡單,但其行為特性常讓開發者踩坑。本文將透過實例深入解析 + 運算子的運作機制,並對比 array_merge() 的差異,助你精準掌握陣列合併的最佳實踐。

核心特性:鍵名衝突時「左優先」

+ 運算子的核心邏輯是:將右側陣列中「不存在於左側陣列」的鍵值對,追加到左側陣列中。若鍵名重複,保留左側陣列的值,右側值被忽略。這與 array_merge()「後覆蓋前」的行為截然不同。

實例 1:基本合併行為

<?php
$arr1 = ['a' => '朝陽區', 'b' => '海澱區'];
$arr2 = ['h' => '西城區', 'a' => '東城區', 'b' => '豐台區'];
$result = $arr1 + $arr2;
print_r($result);
?>

輸出結果:

Array
(
    [a] => 朝陽區   // 保留 $arr1 的值
    [b] => 海澱區   // 保留 $arr1 的值
    [h] => 西城區   // $arr1 無此鍵,新增
)

實例 2:交換順序後的差異

<?php
$arr1 = ['a' => '朝陽區', 'b' => '海澱區'];
$arr2 = ['h' => '西城區', 'a' => '東城區', 'b' => '豐台區'];
$result = $arr2 + $arr1;  // 順序互換
print_r($result);
?>

輸出結果:

Array
(
    [h] => 西城區
    [a] => 東城區   // 保留 $arr2 的值
    [b] => 豐台區   // 保留 $arr2 的值
)

關鍵差異總結:+ vs array_merge()

特性+ 運算子array_merge()
字串鍵名衝突左側優先,右側忽略右側覆蓋左側
數字索引處理保留原索引,不重新編排重新編排索引 (0,1,2...)
適用場景配置合併、預設值填充列表拼接、資料聚合

實戰應用場景

1. 設定檔預設值合併

<?php
$defaults = ['timeout' => 30, 'retry' => 3, 'ssl' => true];
$userConfig = ['timeout' => 60];  // 僅覆寫 timeout
$config = $userConfig + $defaults;
// 結果: timeout=60, retry=3, ssl=true
?>

2. 多語系翻譯回退機制

<?php
$zhTW = ['welcome' => '歡迎', 'login' => '登入'];
$zhCN = ['welcome' => '欢迎'];  // 缺少 login
$translations = $zhCN + $zhTW;  // 缺漏自動回退到繁體
?>

常見陷阱與注意事項

  • 數字索引不重排:[0=>'a'] + [1=>'b'] 結果為 [0=>'a', 1=>'b'],但 [0=>'a'] + [0=>'b'] 僅保留第一個
  • 非陣列操作數會報錯:PHP 8.0+ 若操作數非陣列會拋出 TypeError
  • 效能考量:+ 比 array_merge() 略快,因無需重建索引

最佳實踐建議

  1. 明確語意:需要「預設值填充」用 +,需要「資料合併覆蓋」用 array_merge()
  2. 型別檢查:合併前確認變數皆為陣列,避免執行時錯誤
  3. 單元測試:針對鍵名衝突、空陣列、巢狀結構編寫測試案例

掌握 + 運算子的「左優先」特性,能讓你在處理設定合併、多語系回退、快取策略等場景時寫出更簡潔、高效的程式碼。記住:選對工具,事半功倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved