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

PHP实现大小写敏感的字符统计函数(仅允许使用foreach)

解决字符统计函数的实现问题

嘿,我来帮你搞定这个字符统计的函数!你现在的代码里直接用foreach遍历字符串是行不通的,因为PHP里不能直接对字符串做foreach遍历(虽然某些场景下可能有意外效果,但这不是规范写法),得先把字符串拆成单个字符的数组才行。而且还要注意区分大小写、跳过空格(看你的示例输出,空格不需要统计),下面是完整的实现代码:

function count_char($str) {
    // 初始化空数组存储统计结果
    $charCounts = [];
    // 将字符串拆分为单个字符的数组,这样才能用foreach遍历
    $characters = str_split($str);
    
    foreach ($characters as $char) {
        // 跳过空格字符(如果需要统计空格,直接删掉这行判断即可)
        if ($char === ' ') {
            continue;
        }
        
        // 统计字符出现次数:存在则计数+1,不存在则初始化为1
        if (isset($charCounts[$char])) {
            $charCounts[$char]++;
        } else {
            $charCounts[$char] = 1;
        }
    }
    
    return $charCounts;
}

关键细节说明:

  • 字符串转数组:用str_split($str)把字符串拆成每个字符的数组,这样foreach才能逐个遍历每个字符。
  • 区分大小写:PHP数组的键是区分大小写的,所以'H'和'h'会被当作两个不同的键,完全符合你的需求。
  • 空格处理:根据你给出的示例,空格没有被统计,所以加了if ($char === ' ') continue;来跳过空格。如果后续需要统计空格,直接删除这个判断即可。
  • 仅用foreach循环:整个统计逻辑只用到了foreach,满足你的要求。

测试一下你的示例:

var_dump(count_char("H e l l o"));
// 输出:array(4) { ["H"]=> int(1) ["e"]=> int(1) ["l"]=> int(2) ["o"]=> int(1) }

var_dump(count_char("Hello World"));
// 输出:array(7) { ["H"]=> int(1) ["e"]=> int(1) ["l"]=> int(3) ["o"]=> int(2) ["W"]=> int(1) ["r"]=> int(1) ["d"]=> int(1) }

完全符合你想要的结果哦!

内容的提问来源于stack exchange,提问作者John Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:49:20