2012-06-04 86 views
2

我想计算一组两个值相等的数值。例如,对于值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.

+0

是否必须将相邻的视为1? –

+0

是的,他们必须相邻 –

+0

您的意思是要获得明显的价值? – xdazz

回答

4
$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 
+1

谢谢Scuzzy.I以前从未使用unset()。你教过我一些新的东西。它也可以完美地+1,因为 –

+0

考虑接受他的回答,通过点击他的回答 –

+0

+1左上角的'V'符号来使用'===' – Baba

3

正则表达式溶液:

$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 

在此之后,计数在逗号分隔值进行。

+0

错过了更早的计数要求:) –

+0

没问题。你做起来简单,代码行数比我预期的要少。感谢一堆。它的工作非常完美。 –

+0

@nairobicoder太棒了,希望你能理解正则表达式:) –