我想计算一组两个中的数值以获得相等的值。例如值列表1,2,3,3,3,3,3,3,3,3,5,5,6
我应该1,2,(3,3),(3,3),(3,3),(3,3),(5,5),6
那是我决定将第一个 (3,3) 计为 1 的时候。因此在这种情况下,我应该为所有值设置 $count=8 而不是 $count=13。我试图做一些 for 循环和 if 语句,但我得到了错误的结果。任何想法都受到高度赞赏。谢谢
注意:这些对必须相邻才能被视为 1。
我想计算一组两个中的数值以获得相等的值。例如值列表1,2,3,3,3,3,3,3,3,3,5,5,6
我应该1,2,(3,3),(3,3),(3,3),(3,3),(5,5),6
那是我决定将第一个 (3,3) 计为 1 的时候。因此在这种情况下,我应该为所有值设置 $count=8 而不是 $count=13。我试图做一些 for 循环和 if 语句,但我得到了错误的结果。任何想法都受到高度赞赏。谢谢
注意:这些对必须相邻才能被视为 1。
$list = array(1,2,3,3,3,3,3,3,3,3,5,5,6);
$counter = 0;
foreach($list as $number)
{
if(isset($previous) and $previous === $number)
{
unset($previous);
}
else
{
$previous = $number;
$counter++;
}
}
echo $counter; // 8
带有反向引用的正则表达式解决方案:
$s = '1,2,3,3,3,3,3,3,3,3,5,5,6';
echo count(explode(',', preg_replace('/(\d+),\\1/', '\\1', $s)));
输出:
8
正则表达式匹配一个数字,然后使用反向引用来匹配与其相邻的数字。当两者都匹配时,它们被替换为一个数字。之后的中间结果preg_replace
是:
1,2,3,3,3,3,5,6
之后,对逗号分隔值执行计数。