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

PHP array_merge 合并同结构数组实战:多数据源查询结果聚合

     編輯:PHP 綜合知識

数组合并核心函数:array_merge 多查询结果聚合实战

array_merge() 将一个或多个数组合并为单一数组,字符串键后者覆盖前者,数字键重新索引。本文演示多数据源查询结果合并的典型场景与注意事项。

核心场景:多条件查询合并

<?php
// 假设 $dblink 为数据库连接对象,mem_fetch_array 返回关联数组
// 查询条件 1: t_pid 为 3 或 6
$arr1 = $dblink->mem_fetch_array(
    "SELECT t_pid, imgname, invented, score FROM t_sum_giftimg WHERE t_pid=3 OR t_pid=6", 
    0
);

// 查询条件 2: t_pid 为 10 或 12
$arr2 = $dblink->mem_fetch_array(
    "SELECT t_pid, imgname, invented, score FROM t_sum_giftimg WHERE t_pid=10 OR t_pid=12", 
    0
);

// 合并结果集 (数字键重新索引 0,1,2...)
$imgInfo = array_merge($arr1, $arr2);

// 统一格式化输出
if ($imgInfo) {
    foreach ($imgInfo as $row) {
        $imgs[] = $row; // 可直接使用,键已重置
    }
}
?>

array_merge 行为详解

键类型合并行为示例
数字键 (0,1,2...)重新索引,不覆盖[a,b] + [c,d] → [a,b,c,d]
字符串键 ('name')后者覆盖前者['x'=>1] + ['x'=>2] → ['x'=>2]
混合键分别应用上述规则-

对比:array_merge vs + 运算符

<?php
$a = ['name' => 'A', 0 => 'first'];
$b = ['name' => 'B', 1 => 'second'];

print_r(array_merge($a, $b));
/* 
Array (
    [name] => B      // 字符串键覆盖
    [0] => first     // 数字键重新索引
    [1] => second
)
*/

print_r($a + $b);
/*
Array (
    [name] => A      // 字符串键保留首个
    [0] => first     // 数字键保留首个
    [1] => second    // $a 中无键 1,保留 $b
)
*/
?>

进阶用法

1. 合并多个数组 (可变参数)

$merged = array_merge($arr1, $arr2, $arr3, $arr4);
// 或配合解包 (PHP 7.4+)
$arrays = [$arr1, $arr2, $arr3];
$merged = array_merge(...$arrays);

2. 保留数字键不重新索引

$a = [5 => 'a', 8 => 'b'];
$b = [3 => 'c'];
// 使用 + 运算符
$result = $a + $b; // [5=>'a', 8=>'b', 3=>'c']

3. 递归合并多维数组 (array_merge_recursive)

$a = ['user' => ['name' => 'A', 'tags' => ['php']]];
$b = ['user' => ['email' => 'a@b.com', 'tags' => ['go']]];

print_r(array_merge_recursive($a, $b));
/*
Array (
    [user] => Array (
        [name] => A
        [email] => a@b.com
        [tags] => Array ( [0] => php, [1] => go ) // 同键数组合并
    )
)
*/

4. 替代方案:集合管道风格 (PHP 8.1+)

$imgs = [...$arr1, ...$arr2]; // 展开运算符,保留键
// 或
$imgs = array_merge($arr1, $arr2); // 标准合并,重置键

性能与内存提示

  • 大数组合并:array_merge 创建新数组,内存峰值 = 合并后大小 + 原数组大小
  • 流式处理:百万级数据用 Generator + iterator_to_array 或直接迭代处理
  • 数据库层合并:优先用 UNION ALL 在 SQL 层合并,减少 PHP 内存压力

常见陷阱

  1. null/非数组参数:PHP 7.4+ 抛出 TypeError,旧版本发出警告并返回 null。务必保证参数为数组:array_merge((array)$a, (array)$b)
  2. 字符串键意外覆盖:合并配置数组时,后加载配置会覆盖默认值,符合预期但需注意顺序
  3. 引用丢失:合并后为新数组,原数组引用关系断开
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved