2012-06-04 120 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太棒了,希望你能理解正則表達式:) –