我想编写一个函数,可以在PHP中使用strlen + substr + strpos来计算子字符串在字符串中出现的次数。
不使用substr_count
!
示例:fn('iwritecodeiwritecode-','i');
提前致谢
答案 0 :(得分:1)
此任务不需要strlen()
或substr()
。
仅使用while循环迭代字符串,使用每个成功找到的针推进strpos()
的输出并计算成功匹配的数量。
"魔法"在此技术中,使用之前的strpos()
值(加1)作为所有后续strpos()
次调用的起点。
代码:(Demo)
function countSubstrings($haystack,$needle) {
$pos = -1; // start at -1 so that first iteration uses $pos of 0 as starting offset
$tally = 0;
while (($pos = strpos($haystack, $needle, ++$pos)) !== false) {
++$tally;
}
return $tally;
}
echo countSubstrings('iwritecodeiwritecodeiwritecode', 'i'); // 6
echo countSubstrings('iwritecodeiwritecodeiwritecode', 'Perumal'); // 0
echo countSubstrings('iwritecodeiwritecodeiwritecode', 'write'); // 3
对未来读者的一个说明,这个问题不是最佳做法。正确的方法是对预先存在的php函数
substr_count()
进行简单调用。echo substr_count('iwritecodeiwritecodeiwritecode', 'i');
或者,效率低于
substring_count()
将preg_match_all()
返回匹配数。echo preg_match_all('/i/', 'iwritecodeiwritecodeiwritecode'); // 6
答案 1 :(得分:0)
function fn($string, $char){
$count=0;
for($i=0; $i<strlen($string);$i++){
if($string[$i] == $char){
$count++;
}
}
print($count);
}
fn('iwritecodeiwritecode-','i');
我希望它有助于干杯!
答案 2 :(得分:0)
我提出了自己最好的解决方案。
<?php
$str = "iwritecodeiwritecode";
function find_substr_count($str, $substr) {
$substr_len = strlen($substr);
$substr_count = 0;
for($i = 0; $i < strlen($str); $i++) {
$substr_temp = '';
for($j = $i; $j < $i + $substr_len; $j++) {
if($j < strlen($str)) {
$substr_temp .= $str[$j];
}
}
if($substr_temp == $substr) {
$substr_count += 1;
}
}
return $substr_count;
}
echo find_substr_count($str, "i");
?>
它不仅适用于单个字符。您还可以尝试在函数中传递两个或多个字符,如:
echo find_substr_count($str, "write");
我尽力帮助你。
希望它有所帮助!