Problème avec un tableau

Résolu
cs_plopman Messages postés 67 Date d'inscription dimanche 29 février 2004 Statut Membre Dernière intervention 13 septembre 2006 - 1 mars 2006 à 18:26
cs_plopman Messages postés 67 Date d'inscription dimanche 29 février 2004 Statut Membre Dernière intervention 13 septembre 2006 - 2 mars 2006 à 17:45
Bonsoir à tous,
j'ai un léger problème...

J'ai une table avec un champ X. Je veux avec un code trouver les différentes valeurs de X, et quel nombre il y a de chaque valeur

ex dans la table au champ X
2
3
2
9
4
2

je veux savoir qu'il y a 4 possibilités: 2 3 4 9, et que toute les valeurs sont en 1fois sauf le 2 qui est représenté 3 fois...

Je pensais utiliser un tableau pour savoir si une valeur est deja passé

Je prend une à une les entrées: je regarde si la veleur du champ X est ou non dans mon tableau. Si elle y est pas, on l'y ajoute et on regarde dans toute la table combien il y en a, si elle y est, on incrémente et on regarde l'entrée suivant..

Y a il plus simple ?
SInon comment marche le tableau, car ca me pose quelques problèmes pour ajouter des valeurs avec compact();

Merci d'avance,
Plopman

--------------------------------
Banzai, this is PloPman :)

11 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 mars 2006 à 09:34
Diable...

Y a plus simple. Tu construits bien ton tableau comme tu l'as dit, puis :

<?php
$aTab = array (2,3,2,9,4,2);
$aOccurences = array_count_values ($aTab);
$iNbClefs = count ($aOccurences);
$aClefs = array_keys ($aOccurences);
echo 'Nombres d\'occurences différentes : ', $iNbClefs, '
';
echo 'Les occurences : ', implode (', ', $aClefs), '
';
foreach ($aOccurences as $clef => $val) {
echo $clef, ' apparait ', $val, ' fois
';
}
?>
3
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 mars 2006 à 12:57
Bon je la donne de suite :

SELECT a.x, (SELECT COUNT(*) FROM table_x b WHERE b.x = a.x) occurences FROM table_x a GROUP BY a.x
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
1 mars 2006 à 19:22
Ta solution marche mais elle te fais parcourir ton tableau plein de fois... pas très efficace.
Disons plutôt qu'à chaque fois que tu trouves un chiffre nouveau, ça te crée une case dans un autre tableau à 2 colonnes. La première colonne serait la valeur de ce chiffre, la deuxième le nb d'occurence. Et qd tu tombes sur un chiffre que tu as déjà trouvé, tu incrémentes ta deuxième colonne pour le chiffre en question.
Bref, ce sera ton deuxième tableau qui sera parcouru mais il sera forcément plus cout que le premier, d'où gain de temps.
Ca fait un peu geek tout ça n'empêche...
Si qqn a une autre solution, histoire qu'on s'amuse un peu
0
cs_plopman Messages postés 67 Date d'inscription dimanche 29 février 2004 Statut Membre Dernière intervention 13 septembre 2006
1 mars 2006 à 19:27
euh je vois que ma réponse n'a pas marché... comment fait on pour savoir si un occurence est dans le tableau ?

--------------------------------
Banzai, this is PloPman :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_plopman Messages postés 67 Date d'inscription dimanche 29 février 2004 Statut Membre Dernière intervention 13 septembre 2006
1 mars 2006 à 19:32
ton idée de deux tableaux me plait, mais je suis pas capable de la réaliser... peux tu m'aider ?
le valeur du champ on va l'appeler $x, et on imagine ce code dans un while qui fait défiler les entrées

--------------------------------
Banzai, this is PloPman :)
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
1 mars 2006 à 19:35
tu as la fonction in_array( ) (définition sur php.net)
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
1 mars 2006 à 19:50
Bah alors ça fait

while ( defiler les entrées de $tableau1 as $value ) {

if( array_key_exists($value, $tableau2) { $tableau2[$value]++; }
else { $tableau2[$value] = '1' ; }

}
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
1 mars 2006 à 19:52
ah et si tes variables $x ne sont pas des chiffres, il manque des ' autour des $value
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
2 mars 2006 à 12:20
Ca ne me paraissait pas compliqué mais c'est sûr que c'est mieux quand on connait les fonctions appropriées
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 mars 2006 à 12:50
A vfrai dire, selon laa version de mysql, si elle est assez récente, c'est même faisable avec une seule requête (pour peu que le mysql en question accepte les sous-requêtes).
Mais avant de donner la requête, j'attends de connaître la version...si l'auteur du post se réveille un jour ;-)
0
cs_plopman Messages postés 67 Date d'inscription dimanche 29 février 2004 Statut Membre Dernière intervention 13 septembre 2006
2 mars 2006 à 17:45
merci beaucoup à tous :)

--------------------------------
Banzai, this is PloPman :)
0
Rejoignez-nous