
本文介绍在 Laravel 中使用集合(Collection)高效合并两个结构相似的数组,通过公共字段 id 进行匹配与字段注入,最终生成包含双方数据的新数组,适用于报表聚合、API 数据组装等场景。
本文介绍在 laravel 中使用集合(collection)高效合并两个结构相似的数组,通过公共字段 `id` 进行匹配与字段注入,最终生成包含双方数据的新数组,适用于报表聚合、api 数据组装等场景。
在 Laravel 开发中,常需将来自不同数据源(如多个 Eloquent 查询、API 响应或静态数组)的结构化数据按主键(如 id)进行横向合并。原始数组虽无嵌套关系,但共享关键标识字段,此时直接使用 PHP 原生循环虽可行,却易冗长且不易维护;而 Laravel 的 Collection 提供了链式、声明式的优雅解决方案。
以下为完整实现步骤:
✅ 步骤 1:将数组转为 Laravel 集合
确保输入数组符合标准键值格式(注意:问题中原始写法 id=1 是无效 PHP 语法,应为 'id' => 1),并用 collect() 封装:
$arr_1 = collect([
['id' => 1, 'name' => 'Foo'],
['id' => 2, 'name' => 'Bar'],
]);
$arr_2 = collect([
['id' => 1, 'Percentage' => 60],
['id' => 2, 'Percentage' => 70],
]);
✅ 步骤 2:使用 map() + where() + first() 合并字段
对 $arr_1 中每项,查找 $arr_2 中 id 匹配的第一条记录,并提取 Percentage 值,注入原数组:
use Illuminate\Support\Arr;
$arr_3 = $arr_1->map(function ($item) use ($arr_2) {
$match = $arr_2->where('id', $item['id'])->first();
$percentage = Arr::get($match, 'Percentage', null); // 安全取值,缺失时返回 null
return array_merge($item, ['Percentage' => $percentage]);
});
? 关键说明:
where('id', $item['id'])->first()精准定位匹配项,避免pluck()返回集合导致嵌套数组(如[60]);Arr::get()提供空值兜底,增强健壮性;array_merge()比collect()->put()更直观且保持原生数组结构,便于后续 JSON 输出或视图渲染。
✅ 步骤 3:验证结果
执行后 $arr_3 将输出预期结构:
[
{"id":1,"name":"Foo","Percentage":60},
{"id":2,"name":"Bar","Percentage":70}
]
⚠️ 注意事项
- 若
$arr_2中存在重复id,first()仅取首个匹配项;如需多值合并(如所有百分比汇总),可改用pluck('Percentage')->toArray()并自定义处理逻辑; - 若
$arr_1中某id在$arr_2中不存在,Arr::get()默认返回null,你可根据业务需要替换为默认值(如0或'N/A'); - 大数据量下建议预先对
$arr_2构建索引映射(如$index = $arr_2->pluck('Percentage', 'id')),再通过$index[$item['id']] ?? null实现 O(1) 查找,显著提升性能。
该方法兼具可读性、扩展性与 Laravel 生态一致性,是处理同类数据聚合任务的推荐实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











