【发布时间】:2015-12-01 22:58:53
【问题描述】:
我想计算一个字符串中所有字母出现的频率。说我有
$str = "cdcdcdcdeeeef";
我可以使用 str_split 和 array_count_values 来实现这一点。
array_count_values(str_split($str));
想知道是否有另一种方法可以在不将字符串转换为数组的情况下做到这一点?谢谢
【问题讨论】:
我想计算一个字符串中所有字母出现的频率。说我有
$str = "cdcdcdcdeeeef";
我可以使用 str_split 和 array_count_values 来实现这一点。
array_count_values(str_split($str));
想知道是否有另一种方法可以在不将字符串转换为数组的情况下做到这一点?谢谢
【问题讨论】:
您不必将其转换为array(),您可以使用substr_count() 来实现相同的目的。
substr_count — 计算子字符串出现的次数
<?php
$str = "cdcdcdcdeeeef";
echo substr_count($str, 'c');
?>
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>";
}
?>
count_chars — 返回有关字符串中使用的字符的信息
【讨论】:
有一个 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";
}
?>
【讨论】:
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');
【讨论】:
您也可以通过以下方式进行:
$str = 'aabbbccccdddeeedfff';
$arr = str_split($str);
$result = array_count_values($arr);
$string = http_build_query($result,'','');
echo str_replace('=','',$string);
【讨论】: