
本文介绍如何使用 array_column()、array_count_values() 和 max() 等内置函数,高效提取嵌套关联数组中频次最高的所有键值(支持并列最多的情况)。
本文介绍如何使用 array_column()、array_count_values() 和 max() 等内置函数,高效提取嵌套关联数组中频次最高的所有键值(支持并列最多的情况)。
在处理嵌套数组(如由数据库查询结果或 API 响应生成的多维结构)时,常需统计某字段(如 "id")的出现频次,并找出所有“最高频次”的值——注意:不是仅一个,而是所有并列最多的值(例如 2 和 4 各出现 3 次,均应被返回)。PHP 提供了一套简洁、高效的原生函数组合来完成该任务。
核心思路分三步:
-
提取目标列:使用
array_column($data, 'id')扁平化提取所有"id"值,得到一维数值数组; -
统计频次:用
array_count_values()构建[值 => 出现次数]的关联映射; -
筛选最大频次的所有键:调用
max()获取最高频次,再用array_keys($counts, $maxCount)反向查出所有对应键。
以下是完整可运行示例:
<?php
$data = [
["id" => 1],
["id" => 2],
["id" => 2],
["id" => 2],
["id" => 3],
["id" => 4],
["id" => 4],
["id" => 4]
];
// 步骤1:提取所有 id 值(忽略键名,生成索引数组)
$ids = array_column($data, 'id');
// 步骤2:统计每个 id 的出现次数
$idCounts = array_count_values($ids); // ['1'=>1, '2'=>3, '3'=>1, '4'=>3]
// 步骤3:获取最高频次,并找出所有达到该频次的 id
$maxCount = max($idCounts);
$mostFrequentIds = array_keys($idCounts, $maxCount);
print_r($mostFrequentIds); // 输出: Array ( [0] => 2 [1] => 4 )
?>✅ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
-
array_column()第二个参数为字段名,第三个参数(可选)若传null或省略,将返回索引数组(推荐写法); - 若原始数组中存在缺失
"id"键的子项,array_column()默认返回NULL,建议预处理过滤(如用array_filter($data, fn($item) => isset($item['id']))); - 该方案时间复杂度为 O(n),无须手动循环或排序,性能优异且代码高度可读。
总结:结合 array_column、array_count_values 与 array_keys 是解决“多值最高频统计”问题的标准、健壮且符合 PHP 最佳实践的方式。



















