PHP中合并多个数组并按字段分组:先array_merge合并,再用foreach以指定字段值为键累积元素;PHP 7.4+可用??=简化初始化;可选保留原始键名。

PHP 中把多个数组合并后按某个字段分组,核心是:先用 array_merge 合并,再用循环或 foreach 遍历提取字段值作为键,累积对应元素。不需要依赖第三方库,原生 PHP 就能干净实现。
合并多个数组
如果有多个一维关联数组(比如从不同查询结果拿到的数据),先用 array_merge 拼成一个大数组:
$arr1 = [['id'=>1, 'name'=>'张三', 'dept'=>'技术部'], ['id'=>2, 'name'=>'李四', 'dept'=>'销售部']]; $arr2 = [['id'=>3, 'name'=>'王五', 'dept'=>'技术部'], ['id'=>4, 'name'=>'赵六', 'dept'=>'人事部']]; $merged = array_merge($arr1, $arr2); // 合并成一个数组
按指定字段(如 'dept')分组
遍历合并后的数组,以目标字段值为键,把整条记录推入对应分组:
$grouped = [];
foreach ($merged as $item) {
$key = $item['dept'] ?? '未知部门'; // 防止字段不存在
if (!isset($grouped[$key])) {
$grouped[$key] = [];
}
$grouped[$key][] = $item;
}
// 结果:$grouped['技术部'] 包含张三、王五两条记录
更简洁写法(PHP 7.4+ 可用 null 合并操作符)
避免重复判断键是否存在,用 ??= 初始化空数组:
$grouped = [];
foreach ($merged as $item) {
$key = $item['dept'] ?? '其他';
$grouped[$key] ??= []; // PHP 7.4+
$grouped[$key][] = $item;
}
如果要保持键名不重置(如保留原始 numeric key)
默认 [] 追加会生成数字索引。若需保留原始键(比如原数组带字符串键),可显式赋值:
foreach ($merged as $originalKey => $item) {
$key = $item['dept'] ?? '其他';
$grouped[$key][$originalKey] = $item; // 保留原始键名
}
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











