相信,给出一个字符串“aaabbccqqwweeab”,如何统计出每个字符的出现次数?可以借助循环
<?PHP header(Content-Type: text/html;charset=utf-8); //设置字符编码 //统计字符串中出现的字符,出现次数 $str = 'aaabbccqqwweeab';//字符串示例 echo 字符串为:.$str.'<br/>'; $strRecord=array();//把出现过的字符记录在此数组中,如果记录有,则不记录, for($i=0;$i<strlen($str);$i++){ $found = 0;//默认设置为没有遇到过 foreach((array)$strRecord as $k=>$v){ if($str[$i] == $v['key']){ $strRecord[$k]['count'] += 1;//已经遇到,count + 1; $found = 1;//设置已经遇到过的,标记 continue;//如果已经遇到,不用再循环记录数组了,继续下一个字符串比较 } } if(!$found){ $strRecord[] = array('key'=>$str[$i],'count'=>1);//记录没有遇到过的字符串 } } echo '<pre>'; print_r($strRecord); ?>
分析:
循环一次$str字符串,将出现过的字符记录在$strRecord数组(只记录一次,如果重复了,就忽略)。
遍历$strRecord数组,将字符串中的每个字符(
$str[$i]
)和数组的值($strRecord[]['key']
)进行比较;如果记录里的某个值和这个字符一样,就记录次数($strRecord[]['count']
)+1。
我们来看看输出结果:
OK,统计出来了!
但有时我们不需要统计全部字符,只需要计算指定的一个字符/子串的出现次数,这样怎么操作?
这也简单,PHP提供了一个内置函数可以解决这个问题。我们来看看下面一个例子:
<?PHP header(Content-Type: text/html;charset=utf-8); //设置字符编码 $str = 'aaabbccqqwweeab'; echo 字符串为:.$str.'<br/><br/>'; echo 字符串中出现了 .substr_count($str,'a'). 次 a字符!; echo <br/><br/>字符串中出现了 .substr_count($str,'ab'). 次 ab子串!; ?>
分析:我们使用“substr_count($str,'a')
”和“substr_count($str,'ab')
”语句来统计字符串$str中“a”字符和“ab”字符的出现次数。大家觉得这个会输出什么?是不是应该输出“4”和“2”呀。那么对不对?我们来看一下输出结果:
正确!“a”字符和“ab”字符的出现次数就是“4”和“2”。
下面我们来了解一下这其中的关键函数substr_count()。
substr_count()函数可以计算子串(由一个或多个字符组成)在字符串中出现的次数(区分大小写)。
substr_count($string,$substring,$start,$length)
函数接受2个必需参数$string和$substring、2个可省略参数$start和$length。
前2个必需参数我们通过上面的代码示例已经对大家有所了解,下面我们来看看2个可省略参数$start和$length。
根据参数$start和$length设置的值不同,substr_count()函数返回的值也不同。
<?PHP header(Content-Type: text/html;charset=utf-8); //设置字符编码 $str = 'aaabbccqqwweeab'; echo 字符串为:.$str.'<br/><br/>'; echo 字符串中出现了 .substr_count($str,'a',0,5). 次 a字符!; echo <br/>字符串中出现了 .substr_count($str,'a',2,5). 次 a字符!; echo <br/><br/>字符串中出现了 .substr_count($str,'ab',0,10). 次 ab子串!; echo <br/>字符串中出现了 .substr_count($str,'ab',3). 次 ab子串!; ?>
输出结果:
好了就说到这里了,有其他想知道的,可以点击这个哦。→ →php视频教程
最后给大家推荐阅读一个经典课程《PHP字符串处理(玉女心经版)》,免费的~快来学习啊!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。