6 种方式计算PHP字符串中各个字符出现的次数

<?php
$str = 'AbCdEfGaBcDeFgH0234;,!-AaBbCcDdEeFfGg';

$str = strtoupper($str);          // 不区分大小写时,全部转换成大写或者小写

// 方法一
$res = array();                   // 定义一个结果集空数组
$arr = str_split($str);           // 将字符串转换成数组
$res = array_count_values($arr);  // 统计数组中各个值出现的次数
var_dump($res);

// 方法二
$res = array();                   // 定义一个结果集空数组
$arr = str_split($str);           // 将字符串转换成数组
foreach ($arr as $key => $val) {  // 便利字符串数组
    if (!isset($res[$val])) {            // 如果结果集不存在以某个字符为 key 的键
        $res[$val] = 1;           // 将其数量设置为 1
    } else {
        $res[$val] += 1;          // 否则在其基础上数量加 1
    }
}
var_dump($res);

// 方法三
$res = array();                   // 定义一个结果集空数组
$arr = str_split($str);           // 将字符串转换成数组
$unique = array_unique($arr);     // 数组字符去重
foreach ($unique as $key => $val) {
    $res[$val] = substr_count($str, $val);  // 统计某字符在字符串中出现的次数
}
var_dump($res);

// 方法四 ASCII 思路
$res = array();                   // 定义一个结果集空数组
$arr = str_split($str);           // 将字符串转换成数组
foreach ($arr as $key => $val) {
    $ascii = ord($val);
    if (!isset($res[$ascii])) {
        $res[$ascii] = 1;
    } else {
        $res[$ascii] += 1;
    }
}

foreach ($res as $key => $val) {
    $res[chr($key)] = $val;
    unset($res[$key]);
}

var_dump($res);

/**
 * 在 PHP 中字符串本身是有下标的 举个例子:
 * $str = 'AaBbCcDdEeFfGg';
 * $str[0] 对应的是字符 A   $str[2] 对应的是字符 B
 * 所以根据这个特性,以上方法二和方法四可以延伸出另外两种方法
 */

// 方法五
$res = array();                     // 定义一个结果集空数组
$strLen = strlen($str);             // 计算字符串的长度
for ($i = 0; $i < $strLen; $i++) {  // 便利字符串数组
    if (!isset($res[$i])) {                // 如果结果集不存在以某个字符为 key 的键
        $res[$i] = 1;               // 将其数量设置为 1
    } else {
        $res[$i] += 1;              // 否则在其基础上数量加 1
    }
}
var_dump($res);

// 方法六
$res = array();                    // 定义一个结果集空数组
$strLen = strlen($str);            // 计算字符串的长度
for ($i = 0; $i < $strLen; $i++) { // for 循环每一个字符
    $ascii = ord($str[$i]);        // 将字符转换成 ASCII 码
    if (!isset($res[$ascii])) {
        $res[$ascii] = 1;
    } else {
        $res[$ascii] += 1;
    }
}

foreach ($res as $key => $val) {   // 遍历结果集
    $res[chr($key)] = $val;        // 将 ASCII 码再次转换成普通字符
    unset($res[$key]);             // 删除原有 ASCII 码的 key
}
var_dump($res);
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值