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

PHP array_merge 陷阱:數字鍵不覆蓋反而重新索引的深度解析

     編輯:PHP 綜合知識

現象重現

$a1 = [1 => 'abc', 3 => 10];
$a2 = [1 => 'efg', 3 => 20];
print_r(array_merge($a1, $a2));

預期 vs 現實

// 預期(字符串鍵行為)
Array ( [1] => efg [3] => 20 )

// 實際輸出
Array ( [0] => abc [1] => 10 [2] => efg [3] => 20 )

官方文檔鐵律

「若輸入數組包含數字鍵名,後面的值不會覆蓋原值,而是附加到後面。若只給一個數字索引數組,鍵名將以連續方式重新索引。」

底層邏輯解析

鍵類型array_merge 行為+ 運算符行為
字符串鍵後覆蓋前左優先,不覆蓋
數字鍵重新連續索引(0,1,2...),不覆蓋保留原鍵,衝突左優先

實戰避坑指南

場景一:需保留數字鍵、後覆蓋前

$result = $a1 + $a2; // [1=>'abc', 3=>10]  左優先,不符合
// 正確做法:先反轉再合併再反轉,或遍歷覆蓋
$result = array_replace($a1, $a2); // [1=>'efg', 3=>20] 完美!

場景二:需重新索引合併

$merged = array_merge($a1, $a2); // 已是連續索引
// 或
$merged = array_values($a1 + $a2); // 先合併保留鍵,再重置索引

場景三:單數組重新索引

$arr = [5 => 'a', 8 => 'b'];
$reindexed = array_merge($arr); // [0=>'a', 1=>'b']  文檔明確支援單參數

總結記憶口訣

  • 字符串鍵:merge 後勝,+ 先勝。
  • 數字鍵:merge 重排,+ 保留。
  • 單參數 merge:專治數字鍵非連續。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved