2

等しい値の2つのグループの数値をカウントしたいと思います。たとえば、値のリストの場合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=13ではなく$count=8にする必要があります。forループとifステートメントをいくつか実行しようとしましたが、間違った結果が得られます。どんなアイデアでも大歓迎です。ありがとう

注:1と見なされるには、ペアが隣接している必要があります。

4

2 に答える 2

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
于 2012-06-04T06:49:34.423 に答える
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

正規表現は数値と一致し、次に後方参照を使用して隣接する数値と一致します。両方が一致すると、1つの数字に置き換えられます。後の中間結果preg_replaceは次のとおりです。

1,2,3,3,3,3,5,6

その後、カンマ区切りの値に対してカウントが実行されます。

于 2012-06-04T06:47:48.720 に答える