众数是数组中出现次数最多的元素;PHP需用array_count_values()统计频次,再取max()对应键,支持多众数、空数组及频次相同情况。

众数是指数组中出现次数最多的元素。PHP 中没有内置函数直接求众数,但可以通过统计频次再筛选实现,关键在于处理多个众数、空数组或所有元素频次相同的情况。
统计每个元素的出现次数
使用 array_count_values() 快速统计频次,它接收索引数组或关联数组(值作为键),返回「值 → 出现次数」的关联数组。
例如:
$arr = [1, 2, 2, 3, 3, 3, 4];
$counts = array_count_values($arr); // [1=>1, 2=>2, 3=>3, 4=>1]
找出最大频次并提取所有众数
先用 max() 获取最高出现次数,再遍历频次数组,把所有达到该次数的键(即原数组中的值)收集起来。
- 支持多个众数(如
[1,1,2,2,3]的众数是[1,2]) - 若所有元素只出现一次(如
[1,2,3]),则全部为众数 - 空数组返回空数组,避免 max() 警告,建议提前判断
完整可运行函数示例
function getMode($arr) {
if (empty($arr)) return [];
$counts = array_count_values($arr);
$maxCount = max($counts);
return array_keys($counts, $maxCount);
}
// 测试:
print_r(getMode([1,2,2,3,3,3])); // [3]
print_r(getMode([5,5,1,1,9])); // [5,1]
注意事项与扩展建议
该方法默认对值做严格比较(===),适合数字、字符串等标量。若需处理对象或嵌套数组,需手动遍历 + 序列化或自定义哈希逻辑。
如需只取一个众数(首个),可用 reset() 或 array_shift();如需按原顺序返回,可结合 array_unique($arr) 遍历校验。
立即学习“PHP免费学习笔记(深入)”;











