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 :

Tri d'un tableau multidimensionnel (sur la 1ère dimension)


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut Tri d'un tableau multidimensionnel (sur la 1ère dimension)
    Bonsoir,

    Je viens de me relancer dans un projet et je me heurte au tri de mon tableau ...
    Je le lis avec foreach par après

    J'ai essayé avec "asort()" ... mais il n'y a pas de tri
    J'ai essayé avec "array_multisort($liste_icones_membres[0],SORT_ASC);" ... j'ai un message d'erreur "Warning: array_multisort() [function.array-multisort]: Argument #1 is expected to be an array or a sort flag in ****/index_2.php on line 179"

    J'ai vérifier le tableau, un tri est possible, mais je ne sais pas faire le tri lors de la lecture de la BDD .

    Voici le code de création du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if ($cat_icones_bloc=='membres' && file_exists($path_icones) && $droits_cat_bin[$cat_options_numero]==1) {
    	$liste_icones_membres[$cat_icones_ordre][$i][title]=$cat_options_nom;
    	$liste_icones_membres[$cat_icones_ordre][$i][path_icone]=$path_icones;
    	$liste_icones_membres[$cat_icones_ordre][$i][path_page]=$path_liens;
    	$liste_icones_membres[$cat_icones_ordre][$i][alt]=$cat_icones_alt;
    }
    Le tri devrait se faire sur : $cat_icones_ordre (je ne connais pas la valeur, cela peut changer suivant certains paramètres) - $i : je ne connais pas la valeur non plus, implémenté par $i ++

    Voici le code de lecture (avec mes 2 essais) :
    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
     
    if (isset($liste_icones_membres)) {
    	//asort($liste_icones_membres);
    	array_multisort($liste_icones_membres[0],SORT_ASC);
    	foreach($liste_icones_membres as $boucle1)  {
    		foreach($boucle1 as $boucle2)  {
    			$membres_icones_title=$boucle2[title];
    			$membres_icones_path_icones=$boucle2[path_icone];
    			$membres_icones_path_liens=$boucle2[path_page];
    			$membres_icones_alt=$boucle2[alt];
     
    			print "&nbsp;&nbsp;<a href=\"$membres_icones_path_liens\" title=\"$membres_icones_title\"><img src=\"$membres_icones_path_icones\" border=\"0\" alt=\"$membres_icones_alt\" /></a>";
    		}
    	}
    }
    Le but est de pouvoir afficher des icônes dans un ordre paramétrable via une variable : $cat_icones_ordre

    Là se sèche et mes recherches sur le net ne m'ont pas fait évoluer

    Si quelqu'un a une idée, elle serait la bien venue.

    @+
    ddaweb

  2. #2
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Pour trier un tableau associatif, usort avec fonction callback

    http://php.net/manual/fr/function.usort.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function cmp($a, $b){
        if ($a['champ4']>$b['champ4']) {
            return -1;
        }
        return 1;
    }
    usort($tab,'cmp');
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    Merci pour ta réponse

    Cette notion est nouvelle pour moi et j'avoue être un peu dans le brouillard car je n'ai aucune formation de base en php, j'ai tout appris sur le tas avec nos meilleurs amis google et cie :
    - à quoi correspondent les variables $a et $ab
    - à quel endroit dois-je placer ce script (je suppose juste avant les foreach)

    J'avais vu cette manière de faire, mais je ne comprenais pas, c'est pour cela que je me suis décidé de refaire un petit tour ici, cela faisais longtemps que je n'avais su trouver seul une solution.

    Citation Envoyé par Dendrite Voir le message
    Pour trier un tableau associatif, usort avec fonction callback

    http://php.net/manual/fr/function.usort.php


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function cmp($a, $b){
        if ($a['champ4']>$b['champ4']) {
            return -1;
        }
        return 1;
    }
    usort($tab,'cmp');
    La variable "$cat_icones_ordre" varie entre 1 et 31, n'est jamais constante en valeur et en nombre de lignes enregistrées.

    C'est une gestion de droit d'accès aux pages, tout le monde n'a pas les mêmes droits évidemment
    Cette partie-ci correspond à des icônes qui s'affichent ou pas, pour les menus déroulant j'ai su faire le tri directement dans la requête mysql.
    Il est clair que j'ai également un contrôle sur la page même en cas d'accès à la page avec l'url et non via le menu ou icône -> accès refusé si pas le droit

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Tu es sûr que ton tableau associatif est bien construit ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tab[$i]['nom']
    $tab[$i]['prenom']
    Tu n'aurais pas interverti $i et ton nom de champ ?

    Peux-tu dire ce que ton tableau a dans le ventre en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($liste_icones_membres);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre chevronné Avatar de ddaweb
    Homme Profil pro
    Webmaster amateur
    Inscrit en
    Janvier 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster amateur
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2013
    Messages : 341
    Par défaut
    Oui le tableau est bien monté, les icônes s'affichent bien mais en désordre par rapport à un champs d'ordre (ce champs est prévu à cet effet).

    Voici la réponse à ta demande :
    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
     
    Array
    (
        [3] => Array
            (
                [2] => Array
                    (
                        [ordre] => 3
                        [title] => Ajouter un chien
                        [path_icone] => images/icones/chien_ajout.gif
                        [path_page] => ?pg=chien_ajouter&rep=cours
                        [alt] => Ajouter un chien
                    )
     
            )
     
        [2] => Array
            (
                [4] => Array
                    (
                        [ordre] => 2
                        [title] => Ajouter un membre
                        [path_icone] => images/icones/membre_ajout.gif
                        [path_page] => ?pg=membre_ajouter&rep=cours
                        [alt] => Ajouter un membre
                    )
     
            )
     
        [31] => Array
            (
                [6] => Array
                    (
                        [ordre] => 31
                        [title] => Rechercher un membre
                        [path_icone] => images/icones/membre_recherche.gif
                        [path_page] => ?pg=membre_recherche&rep=cours
                        [alt] => Rechercher membre
                    )
     
            )
     
    )
    Comme tu vois, la 1ère dimension n'est pas en tri ASC et c'est ce que je cherche à faire
    Le champs 3me dimension [ordre] est un rappel que j'ai ajouté pour contrôle.

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Il me semble que ton tableau pourrait être constuit plus simplement, ce qui permettrait un usort comme suit :
    Pourquoi tu ne nous montres pas le code de construction du tableau ?
    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
    Array
    (
        [0] => Array
    	(
    		[ordre] => 3
    		[title] => Ajouter un chien
    		[path_icone] => images/icones/chien_ajout.gif
    		[path_page] => ?pg=chien_ajouter&rep=cours
    		[alt] => Ajouter un chien
    	)
     
        [1] => Array
    	(
    		[ordre] => 2
    		[title] => Ajouter un membre
    		[path_icone] => images/icones/membre_ajout.gif
    		[path_page] => ?pg=membre_ajouter&rep=cours
    		[alt] => Ajouter un membre
     
    	)
     
        [2] => Array
     
    	(
    		[ordre] => 31
    		[title] => Rechercher un membre
    		[path_icone] => images/icones/membre_recherche.gif
    		[path_page] => ?pg=membre_recherche&rep=cours
    		[alt] => Rechercher membre
    	)
    )
     
    function cmp($a, $b){
        if ($a['ordre']>$b['ordre']) {
            return -1;
        }
        return 1;
    }
    usort($tab,'cmp');
    print_r($tab);
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. [PHP 5.3] Trie tableau multidimensionnel sur n colonne(s)
    Par locobastos dans le forum Langage
    Réponses: 2
    Dernier message: 18/06/2012, 16h09
  2. Tri d'un tableau multidimensionnel
    Par ant0inep dans le forum Langages serveur
    Réponses: 2
    Dernier message: 22/08/2010, 14h09
  3. Tri d'un tableau multidimensionnel
    Par ant0inep dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2010, 09h31
  4. Réponses: 2
    Dernier message: 15/05/2007, 16h56
  5. [Tableaux] tri sur un tableau multidimensionnel
    Par maysa dans le forum Langage
    Réponses: 3
    Dernier message: 11/04/2007, 08h53

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