
本文介绍使用 array_map 和 array_count_values 高效统计多维数组中某一固定索引(如 [3])下所有元素的重复次数,并生成键为值、值为频次的统计结果数组。
本文介绍使用 array_map 和 array_count_values 高效统计多维数组中某一固定索引(如 [3])下所有元素的重复次数,并生成键为值、值为频次的统计结果数组。
在实际 PHP 开发中,常需对多维数组的某一层级字段(如第 4 列,即索引 3)进行频次分析——例如统计设备产线代码、状态标识或分类标签的分布情况。无需手动遍历计数,PHP 提供了简洁高效的函数组合方案。
核心思路是:先提取所有子数组中指定索引的值,再对这些值进行频次统计。推荐使用 array_map() 配合匿名函数(或具名回调)提取目标列,再用 array_count_values() 直接生成频次映射数组。
以下是完整可运行示例:
<?php $data = [
['CHICAGO', '14', 'MUFFIN A LINE', 'MUFA-D', 'Arm Bearings - Check for play, lubricate if needed.'],
['CHICAGO', '14', 'MUFFIN A LINE', 'MUFA-D', 'Linkage - Check for wear and broken links.'],
['MEMPHIS', '05', 'BREADING LINE 1', 'BRD1-IS', 'Gear Box oil level'],
['MEMPHIS', '05', 'BREADING LINE 1', 'BRD1-IS', 'Bearings visual inspection'],
['MEMPHIS', '05', 'BREADING LINE 1', 'BRD1-IS', 'Electrical Plug condition'],
['CHICAGO', '02', 'JBC LINE 2', 'JBC-BAK-B', 'Plate separator shaft']
];
// 方式一:使用匿名函数(推荐,语义清晰、无全局污染)
$counts = array_count_values(array_map(fn($row) => $row[3], $data));
// 方式二:使用具名函数(兼容 PHP 2
// [BRD1-IS] => 3
// [JBC-BAK-B] => 1
// )
?>
✅ 关键优势:
- 一行逻辑完成提取 + 统计,代码简洁、可读性强;
- 充分利用内置函数,性能优于手动 foreach 循环;
- 自动忽略空值或缺失索引(若某子数组无 [3] 键,会触发 Notice,建议生产环境加健壮性判断)。
⚠️ 注意事项:
- 确保所有子数组均存在目标索引(如 [3]),否则会触发 Undefined index 警告。如数据不规整,可改用 ?? 运算符提供默认值:$row[3] ?? 'unknown';
- array_count_values() 要求输入为一维数值/字符串数组,不支持嵌套或对象,务必确保 array_map 返回的是标量值列表;
- 若需按频次降序排列结果,可在最后追加 arsort($counts)。
该方法适用于 PHP 7.3+,兼顾简洁性与实用性,是处理结构化二维数组聚合统计的推荐实践。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











