
使用 Laravel 的集合(Collection)提供的 flatten() 方法,可轻松将多维数组降维为一维数组,特别适用于合并内部包含多个子数组的结构化数据。
使用 laravel 的集合(collection)提供的 `flatten()` 方法,可轻松将多维数组降维为一维数组,特别适用于合并内部包含多个子数组的结构化数据。
在 Laravel 开发中,经常需要处理嵌套数组(如从数据库关系查询或 API 响应中获取的分组数据),并将其“展平”为单一扁平数组。例如,你有一个形如以下结构的变量 $data:
$data = [
[
["view_id" => 1, "meta_detail_id" => 1],
["view_id" => 2, "meta_detail_id" => 1]
],
[
["view_id" => 7, "meta_detail_id" => 4]
]
];
目标是将其合并为一个包含全部子项的一维数组:
[
["view_id" => 1, "meta_detail_id" => 1],
["view_id" => 2, "meta_detail_id" => 1],
["view_id" => 7, "meta_detail_id" => 4]
]
✅ 推荐方案:使用 collect()->flatten()
Laravel 的集合类提供了简洁高效的 flatten() 方法。注意:flatten() 默认递归展开所有层级,而本例只需展开一层(即把二维数组变为一维),因此应显式传入深度参数 1:
$flattened = collect($data)->flatten(1)->values()->toArray();
- collect($data):将原数组转为 Collection 实例;
- flatten(1):仅展开第一层嵌套(避免深层对象被意外拆解);
- values():重置数组键名,确保返回连续数字索引(否则可能保留原始键导致非标准 JSON 输出);
- toArray():转回普通 PHP 数组,便于后续 JSON 响应或传递。
✅ 输出结果完全符合预期,且代码简洁、语义清晰、性能良好。
⚠️ 注意事项
- ❌ array_merge(...$data) 在 PHP 7.4+ 可行,但要求 $data 是数值索引且无空子数组,否则易出错;
- ❌ call_user_func_array('array_merge', $data) 仅当 $data 是「待合并数组的列表」时有效,而你的 $data 是二维结构,直接传入会导致错误;
- ✅ flatten(1) 是 Laravel 最佳实践,兼容性好(Laravel 5.5+),且对 null/空数组有良好容错;
- 若需兼容纯 PHP 环境(非 Laravel),可改用 array_reduce() 或 array_merge(...$data)(需先校验 $data 类型)。
? 总结
对于 Laravel 项目,优先使用 collect($array)->flatten(1)->values()->toArray() 实现嵌套数组合并——它语义明确、链式流畅、健壮可靠。无需手动循环或复杂回调,一行代码即可完成专业级数组扁平化。











