六种方式计算PHP字符串中各个字符出现次数的方法
$str = ‘AbCdEfGaBcDeFgH0234’;
s
t
r
=
s
t
r
t
o
u
p
p
e
r
(
str = strtoupper(
str=strtoupper(str); // 不区分大小写时,全部转换成大写或者小写
方法一
$res = array(); // 定义一个结果集空数组 a r r = s t r s p l i t ( arr = str_split( arr=strsplit(str); // 将字符串转换成数组 r e s = a r r a y c o u n t v a l u e s ( res = array_count_values( res=arraycountvalues(arr); // 统计数组中各个值出现的次数 var_dump($res);
方法二
$res = array(); // 定义一个结果集空数组 a r r = s t r s p l i t ( arr = str_split( arr=strsplit(str); // 将字符串转换成数组 foreach ($arr as $key => KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (!isset(res[$val])) { // 如果结果集不存在以某个字符为 key 的键
r e s [ res[ res[val] = 1; // 将其数量设置为 1
} else {
r e s [ res[ res[val] += 1; // 否则在其基础上数量加 1
} } var_dump($res);
方法三
$res = array(); // 定义一个结果集空数组 a r r = s t r s p l i t ( arr = str_split( arr=strsplit(str); // 将字符串转换成数组 u n i q u e = a r r a y u n i q u e ( unique = array_unique( unique=arrayunique(arr);
// 数组字符去重 foreach ($unique as $key => $val) {
r e s [ res[ res[val] = substr_count($str, KaTeX parse error: Expected 'EOF', got '}' at position 27: …计某字符在字符串中出现的次数 }̲ var_dump(res);
方法四 ASCII 思路
$res = array(); // 定义一个结果集空数组 a r r = s t r s p l i t ( arr = str_split( arr=strsplit(str); // 将字符串转换成数组 foreach ($arr as $key => $val)
{
a s c i i = o r d ( ascii = ord( ascii=ord(val);
if (!isset( r e s [ res[ res[ascii])) {
r e s [ res[ res[ascii] = 1;
} else {
r e s [ res[ res[ascii] += 1;
} }foreach ($res as $key => $val) {
r e s [ c h r ( res[chr( res[chr(key)] = v a l ; u n s e t ( val; unset( val;unset(res[KaTeX parse error: Expected 'EOF', got '}' at position 8: key]); }̲ var_dump(res);/** * 在 PHP 中字符串本身是有下标的 举个例子: * $str = ‘AaBbCcDdEeFfGg’; * $str[0]
对应的是字符 A $str[2] 对应的是字符 B * 所以根据这个特性,以上方法二和方法四可以延伸出另外两种方法 */
方法五
$res = array(); // 定义一个结果集空数组 s t r L e n = s t r l e n ( strLen = strlen( strLen=strlen(str); // 计算字符串的长度 for ($i = 0; $i < $strLen; KaTeX parse error: Expected '}', got 'EOF' at end of input: … if (!isset(res[$i])) { // 如果结果集不存在以某个字符为 key 的键
r e s [ res[ res[i] = 1; // 将其数量设置为 1
} else {
r e s [ res[ res[i] += 1; // 否则在其基础上数量加 1
} } var_dump($res);
方法六
$res = array(); // 定义一个结果集空数组 s t r L e n = s t r l e n ( strLen = strlen( strLen=strlen(str); // 计算字符串的长度 for ($i = 0; $i < $strLen; $i++)
{ // for 循环每一个字符
a s c i i = o r d ( ascii = ord( ascii=ord(str[ i ] ) ; / / 将字符转换成 A S C I I 码 i f ( ! i s s e t ( i]); // 将字符转换成 ASCII 码 if (!isset( i]);//将字符转换成ASCII码if(!isset(res[$ascii])) {
r e s [ res[ res[ascii] = 1;
} else {
r e s [ res[ res[ascii] += 1;
} }foreach ($res as $key => $val) { // 遍历结果集
r e s [ c h r ( res[chr( res[chr(key)] = v a l ; / / 将 A S C I I 码再次转换成普通字符 u n s e t ( val; // 将 ASCII 码再次转换成普通字符 unset( val;//将ASCII码再次转换成普通字符unset(res[KaTeX parse error: Expected 'EOF', got '}' at position 41: …有 ASCII 码的 key }̲ var_dump(res);