J'ai un tableau comme ceci: J'ai trouvé la fonction array_count_values () code>, mais il regroupera toutes les mêmes valeurs et comptera les occurrences sans Respecter les pauses dans les séquences consécutives. P>
[1] = 3;
[2] = 2;
[3] = 2;
[1] = 2;
[2] = 2;
[3] = 1;
6 Réponses :
Il peut être fait simplement manuellement:
Au-delà du fait qu'il s'agit d'une réponse uniquement du code, pourquoi personne DV Cette solution correcte et intelligente? ... et pourtant la réponse votée la plus élevée est pratiquement incorrecte. Désolé Stack Overflow - Les électeurs vous permettent de vous laisser tomber sur cette page. Je serais probablement uv si il y avait une explication.
$current = null; foreach($your_array as $v) { if($v == $current) { $result[count($result)-1]++; } else { $result[] = 1; $current = $v; } } var_dump($result);
une doublure pour votre solution serait $ Résultat = exploser (',', implorez (',', array_count_values ($ your_array)));
Cette réponse perd la relation entre le nombre répété dans une séquence donnée et la longueur de la séquence. Amber, veuillez améliorer cette réponse de ce code.
Voici la façon dont je le ferais:
N'utilisez jamais de comptage ($ de tableau) à l'intérieur d'une boucle, sa calculée dans toutes les boucles, foreach () est une structure de boucle beaucoup meilleure pour un tableau en PHP de toute façon
Cet extrait génère des avis de compensation indéfinis et ne doit pas être utilisé.
function findRepetitions($times, $array) { $values = array_unique($array); $counts = []; foreach($values as $value) { $counts[] = ['value' => $value, 'count' => 0]; } foreach ($array as $value) { foreach ($counts as $key => $count) { if ($count['value'] === $value) { $counts[$key]['count']++; } } } $repetitions = []; foreach ($counts as $count) { if ($count['count'] === $times) { $repetitions[] = $count['value']; } } return $repetitions; }
Cette réponse que cette seule réponse a besoin de son explication. Pourquoi existe-t-il un paramètre $ fois $ HOPS CODE>?
Qu'en est-il de PHP's Array_Count_Values fonction? sortie: p>
@Claindsilva Il renvoie la mauvaise réponse bien que ¯ \ _ (ツ) _ / ¯ code>
Je ne sais pas pourquoi tant de gens ont suscité cette réponse incorrecte. Pour faire tourner mon phrasé, c'est la bonne réponse à une question différente.
Ma suggestion est d'extraire et de retirer la première valeur du tableau avant d'entrer dans la boucle et d'utiliser un tableau temporaire ( code: ( Démo ) P> $ Carry code>) pour suivre si chaque nouvelle valeur correspond à la touche de la matrice de transport. Si oui, incrémentez-le. Sinon, appuyez sur le nombre de séquences terminé dans le réseau de résultat et écrasez-le avec la nouvelle valeur et définissez le compteur sur 1. Lorsque la boucle se termine, poussez la portée persistante dans le jeu de résultats. Mon extrait ne vérifie pas si le tableau d'entrée est vide; Si nécessaire, ajoutez cette condition à votre projet.
$result = [];
$carry = [];
foreach ($array as $value) {
if ($carry && key($carry) === $value) {
++$carry[$value];
} else {
unset($carry);
$carry = [$value => 1];
$result[] = &$carry;
}
}
unset($carry);
print_r($result);
Ce n'est pas un tableau valide car les touches doivent être uniques
Du: 1 -Nombre => 1 compte => 3, 2 Numéro => 2 Nombre => 2 ....
@Dagon, je pense que c'est ce qu'il affirme sur une matrice 2D ou en utilisant la déclaration =>.
Ceci s'appelle le codage de la longueur d'exécution.