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

PHP 合併多個陣列:array_merge() 完整用法指南

     編輯:PHP 綜合知識

前言

array_merge() 是 PHP 合併陣列的核心函式,支援合併兩個或多個陣列。理解其鍵名重組規則對避免資料覆蓋錯誤至關重要。

基本語法

array_merge(array ...$arrays): array

核心行為規則

陣列類型鍵名衝突處理鍵名重組
關聯陣列(字串鍵)後者覆蓋前者保持原鍵名
索引陣列(數字鍵)不覆蓋,依序追加重新從 0 連續索引
混合陣列字串鍵覆蓋,數字鍵重組字串鍵保留,數字鍵重組

實戰範例

<?php
// 範例 1:關聯陣列合併(後者覆蓋)
$arr1 = ['a' => 1, 'b' => 2];
$arr2 = ['b' => 20, 'c' => 3];
var_dump(array_merge($arr1, $arr2));
// 輸出: ['a' => 1, 'b' => 20, 'c' => 3]

// 範例 2:索引陣列合併(重新索引)
$arr1 = [10, 20];
$arr2 = [30, 40];
var_dump(array_merge($arr1, $arr2));
// 輸出: [0 => 10, 1 => 20, 2 => 30, 3 => 40]

// 範例 3:混合陣列
$arr1 = ['x' => 1, 10, 20];
$arr2 = ['x' => 100, 30];
var_dump(array_merge($arr1, $arr2));
// 輸出: ['x' => 100, 0 => 10, 1 => 20, 2 => 30]

// 範例 4:原文資料庫查詢結果合併
$news = M('news');
$sql = "SELECT COUNT(a.news_id) AS count_news, a.menu_id, b.pid 
        FROM news a LEFT JOIN menu b ON a.menu_id=b.menu_id 
        WHERE a.is_pass=0 GROUP BY a.menu_id";
$count1 = $news->query($sql);

$text_check = M('text_check');
$sql2 = "SELECT COUNT(a.check_id) AS count_news, a.menu_id, b.pid 
         FROM text_check a LEFT JOIN menu b ON a.menu_id=b.menu_id 
         WHERE a.is_pass=0 GROUP BY a.menu_id";
$count2 = $text_check->query($sql2);

// 兩個查詢結果均為數字索引陣列,合併後鍵名重組
$merged = array_merge($count1, $count2);
// 現在 $merged 為單一連續索引陣列,便於統一處理
?>

常見陷阱與替代方案

陷阱:數字鍵意外重組

$a = [5 => 'five', 6 => 'six'];
$b = [7 => 'seven'];
var_dump(array_merge($a, $b));
// 結果: [0 => 'five', 1 => 'six', 2 => 'seven']  // 原鍵名 5,6,7 丟失!

解決:若需保留數字鍵,使用 + 運算子或 array_replace():

$preserved = $a + $b; // 鍵名不變,前者優先
// 或
$preserved = array_replace($a, $b); // 後者覆蓋,鍵名保留

效能提示

  • 合併大量陣列時,array_merge 需重新分配記憶體並複製資料。
  • 迴圈中反覆合併效能較差,建議先收集所有陣列再一次性合併,或使用 array_push / [] 追加元素。

總結

array_merge() 是合併陣列的標準工具,關鍵在於理解「字串鍵覆蓋、數字鍵重組」規則。資料庫多表查詢結果整合、配置檔合併、API 回應聚合等場景均適用。需保留數字鍵時,改用 + 運算子或 array_replace()。

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