找到字符串中所选字符的最长连续序列的长度(PHP)?

时间:2014-10-01 02:17:58

标签: php string count

如何找到字符串中所选字符的最长连续序列的长度?

我想要做的是看看0是否在这样的字符串中出现5次或更多次

" 111010110101010000010010100000000000111"

我需要的功能是一个字符串和一个字符,在上面的例子中,为字符0返回11

非常感谢,大师们:)

3 个答案:

答案 0 :(得分:1)

我想应该有一种更有效的方法来实现这一点,也许是使用正则表达式,但是,仍然是这里我带来的

function howmanytimes($str,$char){
    $maxcount=0;
    $thiscount=0;
    for($i=0;$i<strlen($str);$i++){
        if(substr($str,$i,1)==$char){
            $thiscount++;
            if($thiscount>$maxcount) $maxcount=$thiscount;
        }else $thiscount=0;
    }
    return $maxcount;
}

希望有所帮助!

编辑:如果您只想检查char是否连续出现超过X次,那么有一种更有效的方法可以实现。如果所选的char出现的次数超过X次,则此函数将返回true,否则返回false。

function Xtimes($str,$char,$howmanytimes){
$maxcount=0;
$thiscount=0;
for($i=0;$i<strlen($str);$i++){


if(substr($str,$i,1)==$char){
            $thiscount++;
            if($thiscount>$maxcount){
                if($thiscount==$howmanytimes+1){return true;}
                $maxcount=$thiscount;
            }
        }else $thiscount=0;
    }
    return false;
}

答案 1 :(得分:1)

您可以使用regex

function highCount($string, $select) {
  preg_match_all("/($select+)\1*/", $string, $find);
  foreach($find[0] as $single) {  
    $length[] = strlen($single);
  }
  return max($length);
}

//11
echo highCount("111010110101010000010010100000000000111", 0);

Demo

答案 2 :(得分:0)

你可以试试这个:

 function myFunc($input_string,$find)
 {
 $string=preg_replace("^$find","-",$input_tring);
 $array=explode("-",$string);
 $array=array_diff($array, array(""));
 asort($array);
 return strlen($array[0]);
 }

我认为-字符未出现在您的查找条件中。