
本文介绍如何使用php内置函数高效提取嵌套关联数组中某个键(如'id')值出现次数最多的全部元素,适用于存在多个并列最高频值的场景。
本文介绍如何使用php内置函数高效提取嵌套关联数组中某个键(如'id')值出现次数最多的全部元素,适用于存在多个并列最高频值的场景。
在处理结构化数据时,常需从嵌套数组中统计某字段的频次并识别“最热门”的取值。例如,给定一个由多个 ['id' => N] 子数组构成的集合,目标不是仅获取一个最大频次值,而是完整列出所有达到最高出现次数的 id 值(如示例中 2 和 4 均出现 3 次,均为众数)。
实现该需求的核心思路是三步法:
-
提取目标字段值:使用
array_column($array, 'id')扁平化提取所有id,得到一维数值数组; -
统计频次分布:调用
array_count_values()快速生成[值 => 出现次数]的关联映射; -
筛选最高频键名:用
max()获取最大频次,再用array_keys($counts, $maxCount)反向查出所有匹配该频次的键(即 id 值)。
以下是完整可运行代码:
<?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);
// 步骤3:找出最高出现次数,并反向获取所有对应 id
$maxCount = max($idCounts);
$mostFrequentIds = array_keys($idCounts, $maxCount);
print_r($mostFrequentIds); // 输出: Array ( [0] => 2 [1] => 4 )
?>✅ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
-
array_column()在 PHP 5.5.0+ 可用;若使用旧版本,需手动循环提取; -
array_keys()第二个参数支持严格比较(默认为===),确保类型安全; - 若结果只需一个值(如强制取首个),可用
$mostFrequentIds[0],但本文强调“所有最多重复项”,故保留完整数组; - 该方法时间复杂度为 O(n),性能优异,避免嵌套循环。
综上,结合 array_column、array_count_values 与 array_keys 三函数,即可简洁、健壮、高效地解决嵌套数组中多众数提取问题。



















