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] Comment trier un tableau après l'avoir dédoublonné ?


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut [Tableaux] Comment trier un tableau après l'avoir dédoublonné ?
    Bonjour,

    J'ai un tableau que j'ai réussi à classer en y affichant quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fiche 1 : 3 fois
    Fiche 4 : 22 fois
    Fiche 7 : 2 fois
    Fiche 12 : 16 fois
    Fiche 22 : 10 fois
    C'est le champs "page" qui me permet d'afficher le terme "Fiche x". Par contre, c'est grâce à array_count_values que je peux calculer le nombre de fois que la requete me l'a sorti.

    Maintenant que ça s'affiche bien, je voudrais pouvoir classer ces fiches par le nombre de fois qu'elles apparaissent en décroissant... j'ai testé usort mais j'y arrive pas...

    Je voudrais que ça devienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Fiche 4 : 22 fois
    Fiche 12 : 16 fois
    Fiche 22 : 10 fois
    Fiche 1 : 3 fois
    Fiche 7 : 2 fois

    Voici mon code :

    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
    $quer1 = "SELECT * FROM matable WHERE (date <= '".$datf."' OR date LIKE '".$datf."%') AND (date >= '".$datd."' OR date LIKE '".$datd."%') ORDER BY page ASC ";
     
    $resulta1 = mysql_query($quer1) or die(mysql_error());
     
    while ($do = mysql_fetch_assoc($resulta1)) {
    	$tab[] = $do['page'];
    }
     
    $a=array_count_values($tab);
    //$tab = array_unique ($tab);
    //rsort($tab, SORT_REGULAR);
    //print_r($a);
     
    foreach ($a as $t => $nb) {
    	echo $t." : ".$nb." fois<br />";
    }
    Quelle fonction puis-je utiliser pour trier ce tableau qui a déjà été dédoublonné et que ça m'affiche "Fiche x : xxx fois" ?

    Merci d'avance.

    Puis ensuite, j'aimerai aussi le limiter aux 10 premiers affichages, est-ce possible svp ?

  2. #2
    Membre éclairé
    Avatar de djayp
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 295
    Points : 687
    Points
    687
    Par défaut
    Salut !

    J'avoue n'avoir compris qu'à moitié ce que tu souhaitais faire, mais tu dois certainement pouvoir réaliser ton tri simplement avec SQL.
    Regarder du coté de COUNT(*) et GROUP BY

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $quer1 = "SELECT id, COUNT(*) AS nb_total, SUM(page) AS somme_page 
    FROM matable 
    WHERE (....)
    GROUP BY id
    ORDER BY somme_page DESC ";
    Ici on regroupe les fiches qui ont le même "id", et on compte leur nombre, (ex : fiche 4 : 6 fois), tout en faisant la somme de leur page. Bien sur le code est a adapté selon les noms des champs de ta table.

    A++

  3. #3
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    perso je dirais qu'on ne règles (en général) pas les options d'affichage dans un array().

    au lieu d'écrire

    array(
    [x] => Fiche y : affiché z fois
    )

    crée un array comme ceci (en gardant les mêmes indices, sachant que "x" va de 0 à n-1 mais qu'on l'utilisera pas dans notre cas)

    array (
    [y] => z
    )

    il ne reste ensuite qu'à faire un ksort()

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
    ksort($fruits);
     
    foreach( $fruits AS $k => $v ) {
         echo "fiche ".$k." => ".$v." fois"; // sauf qu'ici ça donnera pas les memes resultats vu mon array() ^^
    }

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Merci à vous deux pour votre aide...

    Je voulais me faire à l'idée d'essayer de faire avec les tableaux pour mieux m'y connaître mais c'était galère et c'est vrai qu'en faisant simplement une requête sql, ça m'a permis de réussir à faire ce que je voulais...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $quer1 = "SELECT COUNT(*) AS nb, page FROM matable WHERE (date <= '".$datf."' OR date LIKE '".$datf."%') AND (date >= '".$datd."' OR date LIKE '".$datd."%') GROUP BY page ORDER BY nb DESC LIMIT 10";
     
    $resulta1 = mysql_query($quer1) or die(mysql_error());
    Merci pour vos aides.


    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Trier un tableau après avoir insérer une ligne!
    Par deamonRav dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/04/2010, 10h27
  2. [Tableaux] comment trier un tableau multidimensionnel
    Par tibotibo69 dans le forum Langage
    Réponses: 2
    Dernier message: 26/02/2008, 17h04
  3. Réponses: 5
    Dernier message: 13/06/2006, 11h08
  4. Comment trier un tableau, et repérer les doublon?
    Par danje dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 18h45

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