php 8.2 中求众数应先用 array_count_values() 统计频次,再用 max() 和 array_keys() 提取所有最高频元素;需注意非标量值过滤、nan 特殊处理及类型严格性。

在 PHP 8.2 中找出数组众数(即出现频次最高的元素),核心在于统计频次 + 找出最大值对应键。注意:众数可能不唯一,需明确需求是否返回全部众数或仅第一个。
用 array_count_values() 快速统计频次
这是最简洁可靠的方式,PHP 原生函数直接返回「值 → 出现次数」的关联数组:
- 对输入数组调用 array_count_values($arr),自动忽略非标量值(如数组、对象会报 Warning)
- 结果是键为原数组元素、值为对应频次的数组;重复元素被合并统计
- 示例:array_count_values([1,2,2,3,2]) 返回 [1=>1, 2=>3, 3=>1]
用 max() 和 array_keys() 提取所有众数
避免手动遍历找最大值,利用 PHP 数组函数链式处理:
- 先用 max($counts) 得到最高频次
- 再用 array_keys($counts, $maxFreq) 反向查出所有达到该频次的原始元素(自动返回全部众数)
- 若只需一个,可加 [0] 或用 reset();若要保持原数组顺序,可配合 array_intersect_key() 过滤
兼容非标量或特殊类型(PHP 8.2 注意点)
PHP 8.2 对类型更严格,array_count_values() 仍只支持 string/int/float/bool/null。若数组含 null、NaN、资源或对象:
- 提前用 array_filter($arr, 'is_scalar') 过滤,或自定义序列化键(如 spl_object_hash($obj))
- 注意 NaN 不等于自身,array_count_values([NAN, NAN]) 会返回两个独立项,需单独处理
- 字符串数字与整数默认不视为相同('1' ≠ 1),如需松散比较,先统一类型(如 array_map('strval', $arr))
完整可运行示例(PHP 8.2)
php
$arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5];
$counts = array_count_values($arr);
$maxFreq = max($counts);
$modes = array_keys($counts, $maxFreq);
var_dump($modes); // int(5),频次为3
?>
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











