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] Tri de tableaux


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut [Tableaux] Tri de tableaux
    Bonjour,

    j'essaie depuis un petit moment de trouver une solution permettant, à partir d'un tableau contenant des noms rangés par ordre croissant, de créer un autre tableaux indicé par les lettres de l'alphabet et contenant la liste des noms dont la première lettre correspond à l'indice du tableau...

    exemple pour la lettre D :

    $tableau["D"] => array("Dupond", "Dupont", "Durand");

    J'aimerais utiliser des fonctions de php prédéfinies pour ça je suis sûr qu'il en existe de très utiles...

    Voici ce dont je dispose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    $colonnes = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",);
     
    while ($liste_alphabetique = mysql_fetch_object($result)) {
     
    	$array[$i] = $liste_alphabetique->nom;
    	$i++;
     
    }
     
    sort($array);
    $array est donc mon tableau de noms rangés par ordre croissant.


    Merci de m'aiguiller

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Le fonctionnement peut être différent selon si tu veux qu'il y est toutes les lettres de l'alphabet ou seulement celles utilisées(ou si elles y sont toutes assurément).

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Il faut prévoir qu'il y ait des noms utilisant chaque lettre de l'alphabet même s'ils n'y en a pas assurément.

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    t'as pas besoin de trier ton tableau il suffit que tu le remplisses au fur et à mesure, ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($row = mysql_fetch_assoc($result)) {
    	$array[ucfirst($row['nom'][0])][] = $row['nom'];
    }
    si tu veux en plus que tes mots soient triés alphabétiquement dans tes sous-tableaux tu peux ajouter "ORDER BY nom" à ta requête.
    Pour info $row['nom'][0] te retourne le premier caractère de la chaîne que tu mets en majuscule avec ucfirst() ou strtoupper().

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    C'est exactement ce que je voulais !!!

    Merci beaucoup

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Je ne parviens pas à afficher les résultats tels que je le souhaite... Je dois être un peu (beaucoup) fatigué

    Je voudrais donc afficher un tableau :
    - première colonne les noms commençant par la première lettre des noms trouvée
    - deuxième colonne les noms commençant par la deuxième lettre des noms trouvée
    etc...

    Ce qui donnerait :

    **D** **L** **T**
    Dupond Leblanc Tramier
    Dupont Leroux
    Durand


    Voici ce que j'ai fait en me basant sur le code donné par Djakisback :

    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
     
    function affiche_membres_colonnes_alphabetiques($array) {
     
     
     
    		$string = "<table width=\"500\"><tr>";
     
    		foreach ($array as $key=>$value) {
     
    			$string .= "<td width=\"100\" align=\"center\"><p>".$key."</p>";
     
    			foreach ($array as $key=>$value) {
     
    				for ($i=0; $i<count($array[$key]);$i++) {
    					$string .= $array[$key][$i]."<br />";
    				}
     
    			}
     
    			$string .= "</td>";
     
    		}
     
    		$string .= "</tr></table>";
     
    		return $string;
     
    	}
    Le problème c'est que dans chaque colonne du tableau affiché, il y a tous les noms trouvés...
    Je ne suis pas très fort en manipulation de tableaux et je ne pense pas y arriver seul. Un peu d'aide svp ?

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Erreur d'étourderie... Voici le code si ça peut aider quelqu'un :


    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
     
    function affiche_membres_colonnes_alphabetiques($array) {
     
    		$string = "<table width=\"500\"><tr>";
     
    		foreach ($array as $key=>$value) {
     
    			$string .= "<td width=\"100\" align=\"center\" ><p>".$key."</p>";
     
     
    				for ($i=0; $i<sizeof($array[$key]);$i++) {
    					$string .= $array[$key][$i]."<br />";
    				}
     
     
    			$string .= "</td>";
     
    		}
     
    		$string .= "</tr></table>";
     
    		return $string;
     
    	}
    Désolé pour les multi-post

  8. #8
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    C'est tout a fait normal car pour chaque ligne tu reprend le foreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foreach ($array as $key=>$value) {
    	$string .= "<td width=\"100\" align=\"center\"><p>".$key."</p>";
    	foreach($value as $nom){
    		$string .= $nom."<br />";
    	}
    	$string .= "</td>";
    }
    Tu peux utiliser un foreach également pour la deuxième boucle

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

Discussions similaires

  1. [Tableaux] Tri de tableaux par date
    Par maxromeo dans le forum Langage
    Réponses: 5
    Dernier message: 08/07/2009, 23h59
  2. [Tableaux] tri de tableaux
    Par yohann26 dans le forum Langage
    Réponses: 5
    Dernier message: 04/01/2008, 16h43
  3. [Tableaux] Tri de tableaux associatifs à 2 dimensions
    Par max44410 dans le forum Langage
    Réponses: 4
    Dernier message: 18/05/2007, 03h54
  4. [Tableaux] tri sur tableaux
    Par pounie dans le forum Langage
    Réponses: 5
    Dernier message: 03/03/2006, 21h19
  5. Tri de tableaux 2D
    Par LeRoiDesLutins dans le forum Langage
    Réponses: 6
    Dernier message: 27/09/2005, 21h45

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