PHP:使用for循环计数元素

时间:2012-06-04 06:40:23

标签: php

我想计算一组两个中的数值以获得相等的值。例如,值列表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。

2 个答案:

答案 0 :(得分: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 :(得分: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

之后,对逗号分隔值执行计数。