Trouver des doublons et trier une chaîne de chiffres

Petit nouveau ! | 5 Messages

03 oct. 2011, 15:24

Bonjour à tous,
voila mon problème, j'ai eu chaîne résultat de ce type:

$resultat = "12 45 1 12 23 5 5 12"


Et je voudrai obtenir un tri croissant de ces nombres selon le nombre de fois ou il apparaissent.
Exemple pour $resultat:

12 (3 fois), 5 (2 fois), 1, 23, 45

Merci de votre aide

Mammouth du PHP | 672 Messages

03 oct. 2011, 15:44

Bonjour.

array_count_values devrait faire ton bonheur :wink:

Petit nouveau ! | 5 Messages

03 oct. 2011, 15:56

Merci pour ta réponse mais je suis novice en php.
J'essaye :

<?php
$resultat = "12 45 1 12 23 5 5 12"
$decouper = explode(" ", $resultat);
$tri = array_count_values($decouper);

echo $tri;

?>

ça ne marche pas ???
Merci pour ta réponse

Petit nouveau ! | 5 Messages

03 oct. 2011, 16:01

Et puis, un autre facteur, la valeur $resultat change.
Merci pour votre réponse car je suis vraiment embété.

ViPHP
ViPHP | 2577 Messages

03 oct. 2011, 16:16

C'est gentil le "Ca ne marche pas" mais pas très explicite.

Je te conseille de lire la doc :http://php.net/manual/fr/function.array ... values.php
Au moins le premier exemple.

Mammouth du PHP | 672 Messages

03 oct. 2011, 16:20

ça ne marche pas ???
C'est un peu court...

- Plantage ? Quel est le message d'erreur ?
- Ca fonctionne mais le résultat ne correspond pas à celui attendu ?
- Autre - préciser...

Je lis le manuel :
array array_count_values ( array $input )
Retourne un tableau contenant les valeurs du tableau input comme clés et leur fréquence comme valeurs.
Si ça retourne un tableau, comme echo attend une chaîne ça ne risque pas de fonctionner #-o

Ce qu'il faut faire :
1. Transformer ta chaîne en tableau (tu fais ça bien).
2. Utiliserarray_count_values pour récupérer un tableau qui contient "les valeurs du tableau input comme clés et leur fréquence comme valeurs".
Tu peux faire un print_r($resultat) pour voir comment le tableau de sortie est constitué.
3. Il faudra ensuite le trier. Pour ça, tu peux utiliser arsort() pour trier le tableau suivant l'ordre décroissant des valeurs.
4. Il ne te restera plus qu'à utiliser le tableau...Et là, ça dépend de ce que tu veux faire !

Petit nouveau ! | 5 Messages

03 oct. 2011, 17:23

Merci pour vos réponse, mais je ny arrive toujours pas.
Voila mon script:
<?php
$leschiffres = "12,21,21,1,1,5,6,1,5";
$resultat = array($leschiffres);
$tri = array_count_values($resultat);
print_r($tri);

?> 
qui me donne :

Code : Tout sélectionner

Array ( [12,21,21,1,1,5,6,1,5] => 1 )
et je voudrai :

Code : Tout sélectionner

1 (3 fois) 5 (2 fois) 6 (1 fois) 12 (1 fois) 21 (1 fois)
Désolé d'être aussi nul, je débute.
Merci pour votre réponse

Eléphanteau du PHP | 44 Messages

03 oct. 2011, 17:36

T'as oublié l'explode :wink:
$lesChiffres= explode(',', '12,21,21,1,1,5,6,1,5');
$tri = array_count_values($lesChiffres);
foreach( $tri as $chiffre => $occurence )
    echo $chiffre . ' => ' . $occurence . ' fois' . "\n";
array() sert à définir un ... array :mrgreen:
$lesChiffres = array(12,21,21,1,1,5,6,1,5); //Les quotes ne sont pas nécessaires pour des numériques

Petit nouveau ! | 5 Messages

04 oct. 2011, 16:17

Merci beaucoup, ça marche !!!