Problème avec un tableau [Résolu]

Signaler
Messages postés
67
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
13 septembre 2006
-
Messages postés
67
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
13 septembre 2006
-
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

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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
';
}
?>
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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
Messages postés
67
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
13 septembre 2006

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 :)
Messages postés
67
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
13 septembre 2006

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 :)
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
tu as la fonction in_array( ) (définition sur php.net)
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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' ; }

}
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
ah et si tes variables $x ne sont pas des chiffres, il manque des ' autour des $value
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Ca ne me paraissait pas compliqué mais c'est sûr que c'est mieux quand on connait les fonctions appropriées
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
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 ;-)
Messages postés
67
Date d'inscription
dimanche 29 février 2004
Statut
Membre
Dernière intervention
13 septembre 2006

merci beaucoup à tous :)

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