我想计算一组两个值相等的数值。例如,对于值1,2,3,3,3,3,3,3,3,3,5,5,6
的列表PHP:使用for循环计数元素
我应该有1,2,(3,3),(3,3),(3,3),(3,3),(5,5),6
也就是说,当我决定要计算第一(3,3)被计算为1.因此,在这种情况下,我应该有$计数= 8代替$ count = 13的所有值。我试图做一些for循环,如果语句,但我得到错误的结果。任何想法是高度赞赏。感谢
注:对是相邻的被视为与反向引用1.
我想计算一组两个值相等的数值。例如,对于值1,2,3,3,3,3,3,3,3,3,5,5,6
的列表PHP:使用for循环计数元素
我应该有1,2,(3,3),(3,3),(3,3),(3,3),(5,5),6
也就是说,当我决定要计算第一(3,3)被计算为1.因此,在这种情况下,我应该有$计数= 8代替$ count = 13的所有值。我试图做一些for循环,如果语句,但我得到错误的结果。任何想法是高度赞赏。感谢
注:对是相邻的被视为与反向引用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
谢谢Scuzzy.I以前从未使用unset()。你教过我一些新的东西。它也可以完美地+1,因为 –
考虑接受他的回答,通过点击他的回答 –
+1左上角的'V'符号来使用'===' – Baba
正则表达式溶液:
$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
在此之后,计数在逗号分隔值进行。
错过了更早的计数要求:) –
没问题。你做起来简单,代码行数比我预期的要少。感谢一堆。它的工作非常完美。 –
@nairobicoder太棒了,希望你能理解正则表达式:) –
是否必须将相邻的视为1? –
是的,他们必须相邻 –
您的意思是要获得明显的价值? – xdazz