
本文介绍如何使用 array_column、array_count_values 和 max 等内置函数,高效提取嵌套关联数组中重复次数最多的全部键值(如多个 ID 并列最高频次)。
本文介绍如何使用 array_column、array_count_values 和 max 等内置函数,高效提取嵌套关联数组中重复次数最多的全部键值(如多个 id 并列最高频次)。
在处理嵌套数组(尤其是由关联子数组构成的列表)时,常需统计某字段(如 "id")的出现频次,并找出所有“最高频次”的值——注意:最高频次可能对应多个不同值(即并列最多),而非仅一个。PHP 提供了一组简洁高效的数组函数组合来完成该任务,无需手动循环计数。
核心思路分三步:
-
提取目标字段值:使用
array_column($data, '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()的第三个参数(index_key)在此场景中留空(或传null),避免意外索引覆盖; - 若源数组中存在
null或非标量id(如数组、对象),array_count_values()会报错,建议提前过滤或类型校验; - 该方法时间复杂度为 O(n),性能优异,适用于数千条以内的常规业务数据;
- 若需同时返回频次,可直接使用
$idCounts[$mostFrequentIds[0]]获取数值,或遍历$mostFrequentIds构建带频次的结果集。
总结:通过 array_column → array_count_values → array_keys + max 这一经典三连操作,即可优雅、健壮地解决“查找嵌套数组中所有最高频元素”的问题,是 PHP 数组处理的实用范式之一。



















