我想計算一組兩個值相等的數值。例如,對於值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