Compter les valeurs identiques d'un tableau

Résolu/Fermé
mimilanv Messages postés 1 Date d'inscription lundi 27 mai 2013 Statut Membre Dernière intervention 27 mai 2013 - 27 mai 2013 à 14:41
Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 - 27 mai 2013 à 15:21
bonjour à tous,

La question a déjà été posée mais je n'ai pas trouvé de réponse adaptée :
je cherche donc à savoir si je m'égare ou si une solution peut résoudre mon problème.
Je récupère la valeur d'un champ texte bdd contenant des données concaténées et séparées par des virgules, issue de cases à cocher concernant le matériel exposé par des bradeurs pour une brocante sous la forme :
--------------------------------------------------------------------------------------------------------
idbrocanteur MatExp (matériel exposé)
--------------------------------------------------------------------------------------------------------
12 bibelots, grenier, jouets anciens, cartes postales
....
23 jouets anciens, grenier, cartes téléphones, timbres
....
------------------------------------------------------------------------------------------------------------
La requête renvoie une ligne par inscrit (au moins un type de matériel est obligatoire)
je récupère bien les différentes valeurs de chaque ligne par un explode.

Mais est il possible de compter l'ensemble des occurences du même nom en parcourant toutes les lignes ?
ici : 2 fois grenier, 2 fois jouets anciens, 1 fois bibelots etc...
......
try{
$db = new PDO('sqlite:brocanteurs.sqlite');
} catch (PDOException $exception) {
die($exception->getMessage());
}
$TBroc=7;
$tableauMatos=array();
$sql='SELECT MatExp from inscriptionsexposants where idbrocante='.$TBroc.' And CategInscrit="E"';
$res=$db->query($sql);

foreach($res as $row) {
$Matos=utf8_encode($row['MatExp']);
}
$tableauMatos[]=explode(", ", $Matos);
...
j'ai essayé array_count_value() sans succès
j'ai tenté une boucle sans résultat significatif.
après je sèche ?
auriez vous une piste svp ?
Merci par avance
A voir également:

1 réponse

Zep3k!GnO Messages postés 2025 Date d'inscription jeudi 22 septembre 2005 Statut Membre Dernière intervention 18 novembre 2015 200
27 mai 2013 à 15:21
Déjà tu as un problème si tu as plusieurs lignes retournées par ta requête, puis tu peux faire ce que tu demandes en bouclant sur les résultats :
$aResult = array();
foreach($res as $row) {
    $tableauDetails=explode(", ", $row['MatExp']);
    if(!empty($tableauDetails)){
        foreach($tableauDetails as $type_materiel){
            if(isset($aResult[$type_materiel])){
                $aResult[$type_materiel]['comptage'] += 1;
            }
            else{
                $aResult[$type_materiel]['comptage'] = 0;
                $aResult[$type_materiel]['nom_a_afficher'] =  utf8_encode($type_materiel);
            }
        }
    }
}
echo "Tableau résultat : <pre>".print_r($aResult, 1)."</pre>";
0