IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Compter le nombre d'occurrences de chaque mot


Sujet :

Langage PHP

  1. #1
    oim
    oim est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Points : 50
    Points
    50
    Par défaut [Tableaux] Compter le nombre d'occurrences de chaque mot
    Bonjour, j'ai un champ qui contient plusieurs mot séparés par une virgule, j'utilise explode pour les séparer et j'aimerai pouvoir compter le nombre de mot identique.

    Exemple : mot1,mot2,mot1.... avoir mot1 (2 fois) - mot2 (1 fois)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $query = sql_query("select mot from loin");
    while (list($mot) = mysql_fetch_row($query)){
     
    	$mot=stripslashes($mot);
     
    	$liste = explode(",",$mot);
    	for ($i=0; $i < sizeof($liste); $i++ ){
    	echo "$liste[1]<br />";
    	}
    }
    Je n'ai absolument aucune idée, j'ai bien essayé de chercher des exemples avec count mais rien de probant, ou rien que j'ai réussi.

    Merci !

  2. #2
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    le code le plus simple qui me vient rapidement à l'esprit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $liste = 'php, java, delphi, php, c, vb, php, java';
    $arListe = explode(',', $liste);
    echo '<pre>';
    print_r($arListe);
     
    $arCount = array();
    foreach($arListe as $val)
    	$arCount[trim($val)] += 1;
     
    print_r($arCount);
    affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Array
    (
        [php] => 3
        [java] => 2
        [delphi] => 1
        [c] => 1
        [vb] => 1
    )
    Zend PHP5 Certification
    MySQL 4 Core Certification

  3. #3
    oim
    oim est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Points : 50
    Points
    50
    Par défaut
    Merci, ca marche très bien mais

    J'ai mal formulé ma question parce que c'est une requete donc je vais avoir
    ->mot1,mot2,mot3
    ->mot2,mot10,mot4

    Et en fait je cherche l'addition par rapport à chaque résultat retourné par la requête.

    Désolé.

  4. #4
    Membre actif
    Inscrit en
    Février 2006
    Messages
    522
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 522
    Points : 282
    Points
    282
    Par défaut
    Tu stockes tous les différents mots dans un tableau pour chaque résultat de ta requête.

    Si ton mot est deja ton tableau (avec array_key_exist) tu incrémentes la valeur
    sinon tu inclus le mot dans ton tableau

    Ou alors j'ai mal compris ce que tu voulais ^^

  5. #5
    oim
    oim est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Points : 50
    Points
    50
    Par défaut
    Merci pour votre aide,

    J'ai toujours du mal, ce code à l'air de fonctionner, peut-il être amélioré ? Et j'ai un problème avec le array que je n'arrive pas à mettre dans des echo.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $query = sql_query("select mot from loin");
    while (list($mot) = mysql_fetch_row($query))
    {
    	$mot=stripslashes($mot);
    	$test.="$mot";
    }
    	$liste = explode(",",$test);
    	$arCount = array();
    	foreach($arListe as $val)
    		$arCount[trim($val)] += 1;
    	echo"<div align=left>";
    	print_r($arCount);
    	echo"<br /></div>";
    }
    Merci !

  6. #6
    oim
    oim est déconnecté
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 118
    Points : 50
    Points
    50
    Par défaut
    Salut, j'ai l'impression d'être arrivé à presqu'à mes fins. C'est pour un module de Tag.

    L'enregistrement dans la table se fait avec des virgules pour chaque article (article1 : tag1,tag2,tag2)

    J'ai un problème avec "ksort($text_count_array);" qui fonctionne mal pour la taille des mots.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    echo '<div>Nuage de Tags</div><br />';
     
    define("MIN_SIZE", 8);
    define("MAX_SIZE", 16);
     
    $result = sql_query("SELECT mot FROM loin WHERE statut='1' LIMIT 0,$nb_nbretag");
    while (list($tag) = mysql_fetch_row($result)){
    	$test.="$tag";
    }
     
    $text_array = explode(',', $test);
     
    $min = MAX_INT;
    $max = -MAX_INT;
     
    $text_count_array = array();
     
    foreach( $text_array as $key=>$word){
            	$text_count_array[] = trim($word);
    }
     
    $text_count_array = array_count_values($text_count_array);
    //ksort($text_count_array);
     
    echo '<div align="left">';
     
    foreach ($text_count_array as $word => $counted){
     
    	$min_size = MIN_SIZE;
    	$max_size = MAX_SIZE;
     
    	if ($counted < $min) $min = $counted;
    	if ($counted > $max) $max = $counted;
     
    	if($max == $min) $counted = 10;
    	else
    	$counted = intval($min_size + (($counted - $min) * (($max_size - $min_size) / ($max - $min))));
     
    	echo '<a href="lien" style="font-size:'.$counted.'px" title="'.$word.'" class="level'.$counted.'">'.$word.'</a> ';
     
    }
     
    echo '</div>';
    Voyez-vous de grosses erreurs et sinon peut-on faire mieux ?

    Merci !

Discussions similaires

  1. Compter le nombre d'occurrences d'un motif dans chaque ligne commande shell
    Par sab113 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 27/04/2013, 15h49
  2. Compter le nombre d'occurrences d'un mot dans un fichier texte
    Par kandro dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 31/12/2011, 15h32
  3. Réponses: 3
    Dernier message: 21/08/2009, 15h16
  4. Réponses: 1
    Dernier message: 15/05/2008, 14h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo