溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)

發(fā)布時(shí)間:2021-08-10 16:34:44 來(lái)源:億速云 閱讀:231 作者:chen 欄目:編程語(yǔ)言

這篇文章主要講解了“PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)”吧!

給出一個(gè)字符串“aaabbccqqwweeab”,如何統(tǒng)計(jì)出每個(gè)字符的出現(xiàn)次數(shù)?可以借助循環(huán)

<?php
header("Content-Type: text/html;charset=utf-8");    //設(shè)置字符編碼
//統(tǒng)計(jì)字符串中出現(xiàn)的字符,出現(xiàn)次數(shù)
$str = 'aaabbccqqwweeab';//字符串示例
echo "字符串為:".$str.'<br/>';
$strRecord=array();//把出現(xiàn)過(guò)的字符記錄在此數(shù)組中,如果記錄有,則不記錄,
for($i=0;$i<strlen($str);$i++){
 $found = 0;//默認(rèn)設(shè)置為沒(méi)有遇到過(guò)
 foreach((array)$strRecord as $k=>$v){
  if($str[$i] == $v['key']){
   $strRecord[$k]['count'] += 1;//已經(jīng)遇到,count + 1;
   $found = 1;//設(shè)置已經(jīng)遇到過(guò)的,標(biāo)記
   continue;//如果已經(jīng)遇到,不用再循環(huán)記錄數(shù)組了,繼續(xù)下一個(gè)字符串比較
  }
 }
 if(!$found){
  $strRecord[] = array('key'=>$str[$i],'count'=>1);//記錄沒(méi)有遇到過(guò)的字符串
 }
}
echo '<pre>';
print_r($strRecord);
?>

分析:

  • 循環(huán)一次$str字符串,將出現(xiàn)過(guò)的字符記錄在$strRecord數(shù)組(只記錄一次,如果重復(fù)了,就忽略)。

  • 遍歷$strRecord數(shù)組,將字符串中的每個(gè)字符($str[$i])和數(shù)組的值($strRecord[]['key'])進(jìn)行比較;如果記錄里的某個(gè)值和這個(gè)字符一樣,就記錄次數(shù)($strRecord[]['count'])+1。

我們來(lái)看看輸出結(jié)果:

PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)

OK,統(tǒng)計(jì)出來(lái)了!

但有時(shí)我們不需要統(tǒng)計(jì)全部字符,只需要計(jì)算指定的一個(gè)字符/子串的出現(xiàn)次數(shù),這樣怎么操作?

這也簡(jiǎn)單,PHP提供了一個(gè)內(nèi)置函數(shù)可以解決這個(gè)問(wèn)題。我們來(lái)看看下面一個(gè)例子:

<?php
header("Content-Type: text/html;charset=utf-8");    //設(shè)置字符編碼
$str = 'aaabbccqqwweeab';
echo "字符串為:".$str.'<br/><br/>';

echo "字符串中出現(xiàn)了 ".substr_count($str,'a')." 次 a字符!";

echo "<br/><br/>字符串中出現(xiàn)了 ".substr_count($str,'ab')." 次 ab子串!";
?>

分析:我們使用“substr_count($str,'a')”和“substr_count($str,'ab')”語(yǔ)句來(lái)統(tǒng)計(jì)字符串$str中“a”字符和“ab”字符的出現(xiàn)次數(shù)。大家覺(jué)得這個(gè)會(huì)輸出什么?是不是應(yīng)該輸出“4”和“2”呀。那么對(duì)不對(duì)?我們來(lái)看一下輸出結(jié)果:

PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)

正確!“a”字符和“ab”字符的出現(xiàn)次數(shù)就是“4”和“2”。

下面我們來(lái)了解一下這其中的關(guān)鍵函數(shù)substr_count()。

substr_count()函數(shù)可以計(jì)算子串(由一個(gè)或多個(gè)字符組成)在字符串中出現(xiàn)的次數(shù)(區(qū)分大小寫)。

substr_count($string,$substring,$start,$length)函數(shù)接受2個(gè)必需參數(shù)$string和$substring、2個(gè)可省略參數(shù)$start和$length。

前2個(gè)必需參數(shù)我們通過(guò)上面的代碼示例已經(jīng)對(duì)大家有所了解,下面我們來(lái)看看2個(gè)可省略參數(shù)$start和$length。

  • $start:用于指定在字符串中何處開(kāi)始搜索子串

  • $length:用于指定搜索的長(zhǎng)度

根據(jù)參數(shù)$start和$length設(shè)置的值不同,substr_count()函數(shù)返回的值也不同。

<?php
header("Content-Type: text/html;charset=utf-8");    //設(shè)置字符編碼
$str = 'aaabbccqqwweeab';
echo "字符串為:".$str.'<br/><br/>';

echo "字符串中出現(xiàn)了 ".substr_count($str,'a',0,5)." 次 a字符!";
echo "<br/>字符串中出現(xiàn)了 ".substr_count($str,'a',2,5)." 次 a字符!";
echo "<br/><br/>字符串中出現(xiàn)了 ".substr_count($str,'ab',0,10)." 次 ab子串!";
echo "<br/>字符串中出現(xiàn)了 ".substr_count($str,'ab',3)." 次 ab子串!";
?>

輸出結(jié)果:

PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)

感謝各位的閱讀,以上就是“PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PHP怎么統(tǒng)計(jì)字符的出現(xiàn)次數(shù)這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI