使用strlen + substr + strpos计算字符串中子字符串出现的次数仅PHP

时间:2017-01-26 11:02:39

标签: php string substr strpos strlen

我想编写一个函数,可以在PHP中使用strlen + substr + strpos来计算子字符串在字符串中出现的次数。

不使用substr_count

示例:fn('iwritecodeiwritecode-','i');

提前致谢

3 个答案:

答案 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");

我尽力帮助你。

希望它有所帮助!