导读:本期聚焦于小伙伴创作的《php中array_count_values统计值出现次数怎么实现?关联数组计数与空值过滤方法有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《php中array_count_values统计值出现次数怎么实现?关联数组计数与空值过滤方法有哪些》有用,将其分享出去将是对创作者最好的鼓励。

在php开发中,统计数组中所有值出现的次数时,array_count_values函数是官方提供的便捷工具,它可以遍历数组并将每个值作为新数组的键,出现次数作为对应的值返回。不过实际使用中,关联数组的场景和空值处理是需要重点注意的部分。

php中array_count_values统计值出现次数怎么实现?关联数组计数与空值过滤方法有哪些

array_count_values函数基本用法

array_count_values函数的语法非常简单,仅接收一个数组作为参数,返回统计后的关联数组。需要注意的是,该函数仅统计数组的值,不会关注原数组的键名,原数组的键名无论是什么类型,都不会影响统计结果。

下面是一个基础的使用示例:

<?php
// 定义一个普通索引数组
$normalArr = [1, 2, 2, 3, 3, 3, 'a', 'a', 'b'];
// 调用array_count_values统计值出现次数
$countResult = array_count_values($normalArr);
// 打印结果
print_r($countResult);
?>

上述代码的输出结果为:

Array
(
    [1] => 1
    [2] => 2
    [3] => 3
    [a] => 2
    [b] => 1
)

关联数组的计数逻辑

对于关联数组,array_count_values同样只关注数组的值,键名会被完全忽略。比如下面的关联数组示例:

<?php
// 定义关联数组
$assocArr = [
    'id' => 10,
    'age' => 20,
    'score' => 10,
    'level' => 20,
    'name' => 'test'
];
// 统计值出现次数
$assocCount = array_count_values($assocArr);
print_r($assocCount);
?>

输出结果为:

Array
(
    [10] => 2
    [20] => 2
    [test] => 1
)

可以看到,原数组的键名id、age等都没有出现在结果中,仅统计了值10、20、test的出现次数。

空值过滤的必要性

array_count_values函数有一个限制:数组的值必须是整型或者字符串类型,如果出现null、数组、对象等类型的值,会直接抛出警告并返回false。因此在实际开发中,统计前过滤空值和其他非法类型的值是很有必要的。

方法一:使用array_filter过滤空值

array_filter函数默认会过滤掉所有等价于false的值,包括null、空字符串、0、false等,如果需要保留0这类合法值,可以自定义过滤回调。

<?php
// 包含空值的数组
$arrWithNull = [1, null, 2, '', 2, null, 3, false];
// 过滤空值,保留0的话可以调整回调
$filteredArr = array_filter($arrWithNull, function($val) {
    // 排除null和空字符串,保留0、false等合法值
    return !is_null($val) && $val !== '';
});
// 重新索引数组,避免原键名影响
$filteredArr = array_values($filteredArr);
// 统计次数
$countRes = array_count_values($filteredArr);
print_r($countRes);
?>

方法二:手动遍历过滤非法值

如果需要更精细的控制,比如排除null同时保留其他所有合法值,可以手动遍历数组筛选:

<?php
$arr = [1, null, 2, 'hello', null, 2, [1,2], 3];
$validVals = [];
foreach ($arr as $val) {
    // 仅保留整型和字符串类型的值,排除null、数组等
    if (is_int($val) || is_string($val)) {
        $validVals[] = $val;
    }
}
$countRes = array_count_values($validVals);
print_r($countRes);
?>

上述代码会过滤掉null和数组元素,仅统计1、2、hello、2、3的出现次数,输出结果为:

Array
(
    [1] => 1
    [2] => 2
    [hello] => 1
    [3] => 1
)

注意事项总结

  • array_count_values仅统计数组的值,与原数组的键名无关,关联数组和非关联数组的统计逻辑一致。
  • 数组值只能为整型或字符串,否则会报错,统计前务必过滤空值和非法类型。
  • 过滤空值时根据业务需求选择array_filter或手动遍历,避免误过滤合法的业务值。
  • 如果统计后需要按照出现次数排序,可以配合arsort函数对结果数组进行降序排列。

array_count_valuesphp关联数组数组计数空值过滤修改时间:2026-07-04 14:45:26

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。