You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:24:03