
本文介绍使用 array_map() 和 array_count_values() 组合高效统计多维数组中某固定索引(如第 4 个元素,即索引 3)所有值的频次,并生成键为值、值为计数的关联数组。
本文介绍使用 array_map() 和 array_count_values() 组合高效统计多维数组中某固定索引(如第 4 个元素,即索引 3)所有值的频次,并生成键为值、值为计数的关联数组。
在实际开发中,我们常需从结构化二维数组(如数据库查询结果或 CSV 解析数据)中按某一列(即某索引位置)进行分组统计。PHP 提供了简洁高效的内置函数组合来完成该任务,无需手动遍历和累加。
核心思路是:
- 使用 array_map() 提取每行中指定索引(如 [3])的值,生成一维值数组;
- 再用 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']
];
// 定义提取器函数:返回每行索引为 3 的元素
$extractIndex3 = function ($row) {
return $row[3] ?? '';
};
// 一步到位:提取 + 统计
$result = array_count_values(array_map($extractIndex3, $data));
print_r($result);
// 输出:
// Array
// (
// [MUFA-D] => 2
// [BRD1-IS] => 3
// [JBC-BAK-B] => 1
// )
?>✅ 优势说明:
立即学习“PHP免费学习笔记(深入)”;
- 代码简洁、函数式风格,逻辑清晰易维护;
- 兼容 PHP 7.3+,无额外依赖;
- array_map() 支持匿名函数,避免全局函数污染;
- ?? '' 防御性处理确保索引不存在时返回空字符串(避免 Notice),可根据业务需要替换为 null 或抛出异常。
⚠️ 注意事项:
- 确保所有子数组长度 ≥ 4(即存在索引 3),否则需添加健壮性校验(如 isset($row[3]));
- 若需区分大小写或做标准化(如 trim、strtolower),应在提取函数中统一处理;
- array_count_values() 仅支持标量值(string/int/float/bool),含数组或对象将触发警告。
该方法适用于日志分析、报表聚合、数据清洗等场景,是 PHP 处理结构化数组统计任务的经典实践。



















