PHP如何按嵌套数组内的class键合并多维数组
你可以通过临时分组再合并的方式实现,PHP 7.4 下可直接运行的代码如下:
// 定义临时数组,以 class 字段值为键做分组 $grouped = []; foreach ($array as $item) { $classKey = $item['class']; // 首次遇到该 class 时直接存入 if (!isset($grouped[$classKey])) { $grouped[$classKey] = $item; continue; } // 已存在该 class 则合并新的字段 $grouped[$classKey] = array_merge($grouped[$classKey], $item); } // 重置外层数组的数字索引,得到最终结果 $outcome = array_values($grouped);
如果偏好更简洁的函数式写法,也可以用 array_reduce 实现,效果完全一致:
$outcome = array_values(array_reduce($array, function ($carry, $item) { $carry[$item['class']] = isset($carry[$item['class']]) ? array_merge($carry[$item['class']], $item) : $item; return $carry; }, []));
两种实现的逻辑都是先以 class 值为键做临时分组,合并同分组下的所有键值对,最后重置外层数组索引得到你需要的结构。如果同 class 下存在相同的人名字段,后出现的字段值会自动覆盖先出现的值,符合你给出的示例预期。
内容的提问来源于stack exchange,提问作者itwasluck3
相关产品推荐
相关产品推荐

