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

PHP中如何合并循环生成的多个动态数量数组?

解决PHP中动态合并多个stdClass对象数组的问题

嘿,我来帮你搞定这个动态数组合并的需求!你说的是循环生成了数量不确定的数组(可能2个、3个甚至更多),每个数组里装的是stdClass对象,现在要把它们合并成一个大数组对吧?这事儿其实挺简单的,给你两种实用的方法:

方法一:PHP 5.6+ 简洁写法(推荐)

从PHP 5.6开始支持可变参数语法,你可以先把所有要合并的数组放到一个容器数组里,然后直接用array_merge配合展开运算符...来合并:

// 第一步:把所有循环生成的数组收集到一个容器里
$allArrays = [];

// 模拟循环生成数组的过程(实际替换成你的业务循环逻辑)
foreach ($yourDataSource as $item) {
    // 假设这里每次循环生成一个包含stdClass对象的数组
    $generatedArray = $yourGenerateArrayFunction($item);
    $allArrays[] = $generatedArray;
}

// 第二步:一键合并所有数组
$mergedResult = array_merge(...$allArrays);

方法二:兼容旧版本PHP的写法

如果你的项目还在使用PHP 5.6以下的版本,那就用call_user_func_array来间接调用array_merge,效果完全一致:

// 同样先收集所有数组到$allArrays里
$allArrays = [];
// ...(你的循环生成逻辑)

// 合并数组
$mergedResult = call_user_func_array('array_merge', $allArrays);

示例验证

给你个贴合你场景的具体例子,模拟你给出的stdClass对象结构:

// 模拟生成3个包含stdClass对象的数组
$arr1 = [
    (object)[
        'orid' => 7,
        'gid' => 13,
        'user_id' => 3,
        'rule_title' => 'test rule',
        'tag_name' => 'tag1'
    ]
];

$arr2 = [
    (object)[
        'orid' => 7,
        'gid' => 13,
        'user_id' => 3,
        'rule_title' => 'test rule',
        'tag_name' => 'tag2'
    ]
];

$arr3 = [
    (object)[
        'orid' => 8,
        'gid' => 14,
        'user_id' => 3,
        'rule_title' => 'another rule',
        'tag_name' => 'tag3'
    ]
];

$allArrays = [$arr1, $arr2, $arr3];
$merged = array_merge(...$allArrays);

// 输出合并后的结果
print_r($merged);

运行后你会得到一个包含3个stdClass对象的大数组,完全符合你的需求。

这里提个小细节:array_merge会重新整理数字索引(如果子数组用的是数字索引的话),但这不影响你里面的stdClass对象,它们会被完整保留下来。如果你的场景需要严格保留原索引,可以考虑用array_replace_recursive,不过一般这种合并对象数组的场景用array_merge就足够了。

内容的提问来源于stack exchange,提问作者Amit Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:57:38