You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何合并数组?如何将同列结构的多组数组合并为一个?

PHP数组合并方法及多查询结果合并方案

嘿,针对你的问题,我来一步步帮你解决!首先先讲PHP里通用的数组合并方法,再结合你多表查询的场景给出最优方案。

一、PHP常用的数组合并方法

下面是几种常见的数组合并方式,适用于不同场景:

  • array_merge():最常用的合并函数,能合并多个数组。对于索引数组,会重新生成连续的索引;对于关联数组,如果键名重复,后面数组的值会覆盖前面的。
    示例:
    $arr1 = [1, 2, 'name' => 'Alice'];
    $arr2 = [3, 'name' => 'Bob'];
    $merged = array_merge($arr1, $arr2);
    // 结果:[1,2,3, 'name' => 'Bob']
    
  • 加号运算符+:和array_merge()不同,不管是索引还是关联数组,键名重复时会保留第一个数组的对应值。
    示例:
    $arr1 = [1, 2, 'name' => 'Alice'];
    $arr2 = [3, 'name' => 'Bob'];
    $merged = $arr1 + $arr2;
    // 结果:[1,2, 'name' => 'Alice']
    
  • array_merge_recursive():遇到重复键名时,不会覆盖值,而是将多个值合并成一个子数组,适合需要保留所有重复键值的场景。

二、针对你多表查询结果的合并方案

你的场景是从多个结构相同的表中查询数据,然后合并成一个数组,这里有两种高效的解决方式:

方案1:用array_merge()循环合并查询结果

如果想保留现有代码的结构,只需要把每个表的查询结果合并即可:

// 你的原查询代码
$stmt1 = $pdo->prepare('SELECT * FROM `formsone`');
$stmt1->execute();
$applications1 = $stmt1->fetchAll();

$stmt2 = $pdo->prepare('SELECT * FROM `formstwo`');
$stmt2->execute();
$applications2 = $stmt2->fetchAll();

$stmt3 = $pdo->prepare('SELECT * FROM `formsthree`');
$stmt3->execute();
$applications3 = $stmt3->fetchAll();

// 合并所有结果
$allApplications = array_merge($applications1, $applications2, $applications3);

如果表更多,建议用循环简化代码,避免重复冗余:

// 定义所有要查询的表名
$tables = ['formsone', 'formstwo', 'formsthree', 'formsfour'];
$allApplications = [];

foreach ($tables as $table) {
    $stmt = $pdo->prepare("SELECT * FROM `$table`");
    $stmt->execute();
    // 逐个合并结果
    $allApplications = array_merge($allApplications, $stmt->fetchAll());
}

方案2:用SQL的UNION ALL一次查询(更高效)

既然所有表结构完全相同,推荐直接用SQL的UNION ALL把多个表的数据合并后再查询,这样只需要和数据库交互一次,减少开销:

$tables = ['formsone', 'formstwo', 'formsthree', 'formsfour'];
// 拼接UNION ALL查询语句
$sqlParts = array_map(function($table) {
    return "SELECT * FROM `$table`";
}, $tables);
$sql = implode(' UNION ALL ', $sqlParts);

$stmt = $pdo->prepare($sql);
$stmt->execute();
// 直接得到合并后的所有数据
$allApplications = $stmt->fetchAll();

注意:UNION ALL会保留所有重复行,如果需要去重可以换成UNION,但UNION会有额外的排序去重开销,你的场景如果不需要去重,用UNION ALL更高效。

内容的提问来源于stack exchange,提问作者Lin Aung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:21:23