我有一个像这样的字符串“ 0011100001100111 ”,我想知道每个序列的长度( 00 , 111 , 0000 , 11 , 00 , 111 ),顺序正确。
我怎么能用PHP做到这一点?
感谢谁来帮助我。
答案 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."'<br />";
$array = array_slice(preg_split('/(?<=(.))(?!\\1)/', $str), 0, -1);
for($i=0; $i<count($array); $i++){
echo "array[".$i."] = '".$array[$i]."', ";
echo "array[".$i."] length = '".strlen($array[$i])."'<br />";
}
返回我需要的值:
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 '
非常感谢!