PHP如何统计数组重复值出现次数、去重后展示各值及对应频次
PHP数组元素出现次数统计实现方案
原代码问题说明
- 数组内的字符串值未加引号,PHP会将其识别为未定义常量,抛出notice级错误
- 两层循环的逻辑错误:当前判定规则为只要遍历到的元素和当前名字不等就输出,会导致单个名字重复输出多次,完全不符合去重+统计的需求
正确实现方案
方案1:使用PHP内置array_count_values函数(推荐)
这个函数是PHP官方提供的专门用于统计数组值出现频率的工具,代码最简洁性能最优:
function select_names(){ // 字符串需要加单/双引号标注 $names = [ 'John', 'Mark', 'Phillip', 'Blessing', 'Victory', 'John', 'Mark', 'Phillip', 'Blessing', 'Victory' ]; // 直接调用内置函数完成统计,返回关联数组:键为原数组值,值为出现次数 $countResult = array_count_values($names); // 遍历统计结果输出,天然去重 foreach ($countResult as $name => $count) { echo $name . ' 出现次数:' . $count . '<br/>'; } } select_names(); ?>
执行后输出效果为:
John 出现次数:2 Mark 出现次数:2 Phillip 出现次数:2 Blessing 出现次数:2 Victory 出现次数:2
方案2:手动实现统计逻辑
如果需要自主实现统计逻辑不依赖内置函数,可以用关联数组作为计数容器:
function select_names(){ $names = [ 'John', 'Mark', 'Phillip', 'Blessing', 'Victory', 'John', 'Mark', 'Phillip', 'Blessing', 'Victory' ]; $countMap = []; foreach ($names as $name) { // 已存在的元素计数+1,未存在的初始化计数为1 isset($countMap[$name]) ? $countMap[$name]++ : $countMap[$name] = 1; } foreach ($countMap as $name => $count) { echo $name . ' 出现次数:' . $count . '<br/>'; } } select_names(); ?>
执行效果和内置函数方案完全一致。
内容的提问来源于stack exchange,提问作者Zebra Webs
相关产品推荐
相关产品推荐

