【问题标题】:count the occurrences of all the letters in a string PHP计算字符串 PHP 中所有字母的出现次数
【发布时间】:2015-12-01 22:58:53
【问题描述】:

我想计算一个字符串中所有字母出现的频率。说我有

$str = "cdcdcdcdeeeef";

我可以使用 str_split 和 array_count_values 来实现这一点。

array_count_values(str_split($str));

想知道是否有另一种方法可以在不将字符串转换为数组的情况下做到这一点?谢谢

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    您不必将其转换为array(),您可以使用substr_count() 来实现相同的目的。

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

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

    PHP Manual

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

    编辑:

    对不起,您可以使用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 Manual: count_chars

    count_chars — 返回有关字符串中使用的字符的信息

    【讨论】:

    • 不是我要找的答案。我想计算字符串中每个字母的所有出现次数,而不仅仅是一个特定的字母。 :)
    【解决方案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";
    }
    ?>
    

    【讨论】:

      【解决方案3】:
      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');
      

      【讨论】:

        【解决方案4】:

        您也可以通过以下方式进行:

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

        【讨论】:

        • 这个答案没有试图教育研究人员。
        猜你喜欢
        • 2021-08-04
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 2013-11-04
        • 2016-01-23
        • 1970-01-01
        • 1970-01-01
        • 2014-07-03
        相关资源
        最近更新 更多