知道字符串中每个序列的长度

时间:2010-03-06 12:33:27

标签: php string

我有一个像这样的字符串“ 0011100001100111 ”,我想知道每个序列的长度( 00 111 0000 11 00 111 ),顺序正确。

我怎么能用PHP做到这一点?

感谢谁来帮助我。

3 个答案:

答案 0 :(得分:5)

创建一个遍历整个字符串的循环。它将查看字符串中的每个字符并将其与前一个字符进行比较。如果它是相同的,那么它会增加一个计数器,如果它不同,它会将计数器值推到一个数组上并清除计数器。

未经测试的代码:

function countSequenceLengths($str){
  $counter = 1;
  $lastChar = $str[0];
  $ret = array();
  for($i=1; $i<=strlen($str); $i++){
    if($i<strlen($str) && $str[$i] == $lastChar){
      $counter++;
    }else{
      $ret[] = $counter;
      $counter = 1;
      $lastChar = $str[$i];
    }
  }
  return $ret;
}

答案 1 :(得分:2)

您可以使用正则表达式来执行此操作:

preg_split('/(?<=(.))(?!\\1)/', $str)

在这里,你需要删除一个额外的空字符串:

array_slice(preg_split('/(?<=(.))(?!\\1)/', $str), 0, -1)

答案 2 :(得分:1)

我在你的帮助下制作的代码:

$string = "1111100111111001111110011111100111111001111... ...10011111100111111001";

$str = substr($string, 10, 12);

echo "str = '".$str."'&lt;br /&gt;";

$array = array_slice(preg_split('/(?<=(.))(?!\\1)/', $str), 0, -1);

for($i=0; $i&lt;count($array); $i++){

   echo "array[".$i."] = '".$array[$i]."', ";

   echo "array[".$i."] length = '".strlen($array[$i])."'&lt;br /&gt;";

}

返回我需要的值:

str =' 111001111110 '

array [0] =' 111 ',数组[0] length =' 3 '

array [1] =' 00 ',数组[1] length =' 2 '

array [2] =' 111111 ',数组[2] length =' 6 '

array [3] =' 0 ',数组[3] length =' 1 '

非常感谢!