在 PHP 中统计字符串中所有字母的出现次数

10

我想要统计一个字符串中所有字母出现的频率。比如说我有:

$str = "cdcdcdcdeeeef";
我可以使用str_split和array_count_values来实现这个功能。

array_count_values(str_split($str));

想知道是否有另一种方法来完成这个操作而不需要将字符串转换成数组?谢谢

4个回答

16

你不需要将它转换为一个array(),你可以使用substr_count()来实现相同的功能。

substr_count — 统计子字符串出现的次数

<?php
$str = "cdcdcdcdeeeef";
echo substr_count($str, 'c'); 
?>

PHP 手册

substr_count() 返回指定的 needle 子串在 haystack 字符串中出现的次数。请注意,needle 区分大小写。

编辑:

对于之前的误解我们表示抱歉,你可以使用 count_chars 来统计字符串中每个字符的出现次数。例如:

<?php
$str = "cdcdcdcdeeeef";

foreach (count_chars($str, 1) as $strr => $value) {
   echo chr($strr) . " occurred a number of $value times in the string." . "<br>";
}
?>

PHP手册:count_chars

count_chars — 返回一个字符串中使用的字符信息


1
不是我想要的答案。我想要计算字符串中每个字母出现的次数,而不仅仅是一个特定的字母。 :) - Wild Widow

2
有一个 PHP 函数可以返回有关字符串中使用的字符的信息:count_chars 可能不是您要找的内容,因为根据http://php.net/manual/en/function.count-chars.php,它会“计算在字符串中每个字节值(0..255)出现的次数,并以各种方式返回”。
来自同一链接的示例(http://php.net/manual/en/function.count-chars.php):
<?php
$data = "Two Ts and one F.";

foreach (count_chars($data, 1) as $i => $val) {
   echo "There were $val instance(s) of \"" , chr($i) , "\" in the string.\n";
}
?>

1
class Strings
{
    public function count_of_each_letter($string){
        $string_chars = array();
        $length_ = mb_strlen($string,'UTF-8');
        if($length_== 0){return null;}
        else{
            for ($i=0; $i < $length_; $i++) { 
                $each_letter = mb_substr($string,0,1,'UTF-8');
                $string_chars[$each_letter] = mb_substr_count($string, $each_letter);
                $string = str_replace($each_letter,"", $string);
                $length_ = mb_strlen($string,'UTF-8');          
            }
            $string = '';
            foreach ($string_chars as $key => $value) { 
                $string .= $key.'-'.$value.'<br>';
            }
            return $string;
        }
    }
}
$new_counter  = new Strings();
echo $new_counter::count_of_each_letter('ختواجرایآهنگبهصورتتکنفرهنمود.اوازسال۱۹۷۲تا۱۹۷۵،۴آلبوماستودیوییتک‌نفرهمنتشرکردوحتینامزدیکجایزهاسکارهمشد.درهمینسال‌هاگروهاقدامبهبرگزاریتورکنسرتدراروپاونیزیکتورجهانیکردند.جکسونفایودرسال۱۹۷۵ازشرکتنشرموسیقیموتاونرکوردزبهسی‌بی‌اسرکوردزنقلمکانکردند.گروههمچنانبهاجراهایبین‌المللیخودادامهمی‌دادواز۱۹۷۶تا۱۹۸۴(از۱۵تا۲۴سالگیمایکل)ششآلبوماستودیوییدیگرمنتشرکرد.درهمینمدت،مایکلترانه‌سرایاصلیگروهجکسونزبود.Cantional,oderGesangbuchAugsburgischerKonfessionin1627.ohannSebastianBachcomposedafour-partsetting,BWV285,whichiswithouttext.twaspublishedasNo.196inthecollectionofchoralesbyJohannPhilippKirnbergerundCarlPhilippEmanufread');

-1

你也可以采用以下方式来实现:

$str = 'aabbbccccdddeeedfff';
$arr = str_split($str);
$result = array_count_values($arr);
$string = http_build_query($result,'','');
echo str_replace('=','',$string);


此答案并不试图教育研究人员。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接