PHP: Comptage d'éléments à l'aide de loops

J'aimerais countr les valeurs numériques dans un groupe de deux pour des valeurs égales. Par exemple pour la list des valeurs 1,2,3,3,3,3,3,3,3,3,5,5,6

Je devrais avoir 1,2,(3,3),(3,3),(3,3),(3,3),(5,5),6

C'est alors que je décide de countr que le premier (3,3) est compté comme 1. Par conséquent, dans ce cas, je devrais avoir $ count = 8 au lieu de $ count = 13 pour toutes les valeurs. J'ai essayé de faire des loops pour les loops et si j'ai des résultats erronés. Une idée est très appréciée. Merci

Remarque: les paires doivent être adjacentes pour être considérées comme 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 

Solution d'expression régulière avec references arrière:

 $s = '1,2,3,3,3,3,3,3,3,3,5,5,6'; echo count(explode(',', preg_replace('/(\d+),\\1/', '\\1', $s))); 

Sortie:

 8 

L'expression régulière correspond à un nombre, puis utilise une reference arrière pour correspondre au nombre qui lui est adjacent. Lorsque les deux sont appariés, ils sont remplacés par un nombre. Le résultat intermédiaire après le preg_replace est:

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

Ensuite, le count est effectué sur les valeurs séparées par des virgules.