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
相关产品推荐
相关产品推荐

