Comment trier en php un tableau multidimensionnel ?


nza2k
WRInaute impliqué
WRInaute impliqué
 
Messages: 771
Inscription: 16 Jan 2004

Comment trier en php un tableau multidimensionnel ?

Message le Jeu Mai 04, 2006 13:07

Bonjour tout le monde,

Le débutant php que je suis a une question à poser sur les tris d'un tableau à plusieurs dimensions.
Prenons un exemple :
Voici un tableau indiquant pour 4 classes scolaires le nombre d'éléves et de professeurs :
- $ecole['classe']['0']['eleve']='10';
- $ecole['classe']['1']['eleve']='20';
- $ecole['classe']['2']['eleve']='3';
- $ecole['classe']['3']['eleve']='1';

- $ecole['classe']['0']['professeur']='2';
- $ecole['classe']['1']['professeur']='3';
- $ecole['classe']['2']['professeur']='1';
- $ecole['classe']['3']['professeur']='1';



Pour créer une boucle toute simple affichant le nombre d'éleves et de professeurs par classe, il suffit d'afficher $ecole['classe'][$i]['eleve'] et $ecole['classe'][$i]['professeur'] pour $i variant de 0 à 3.
PHP m'affichera dans l'ordre 10 élèves et 2 professeurs dans la classe 0 etc...
Simple et logique.

J'aimerais maintenant que PHP m'affiche les classes en les triant par nombre d'élèves :
1 élève et 1 professeur dans la classe 0 (qui était initialement la classe 3)
3 élèves et 1 professeur dans la classe 1 (qui était initialement la classe 2)
etc...

Voyez-vous une façon simple à comprendre à rapide à exécuter (pour PHP) ?

Merci pour votre aide !

Selection A
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 279
Inscription: 14 Mar 2005

Message le Jeu Mai 04, 2006 14:24

Un conseil : procure toi une doc assez simple des grandes fonctions PHP! c trouvable facilement sur le web.

fonction PHP à utiliser pour trier un tableau : sort() ou rsort() ou ksort() ou krsort() selon tes besoins


nza2k
WRInaute impliqué
WRInaute impliqué
 
Messages: 771
Inscription: 16 Jan 2004

Message le Jeu Mai 04, 2006 15:46

Merci pour le conseil Selection A !

Je me suis un peu informé sur ces fonctions et à moins que je n'ai pas tout compris, je pnese qu'en l'état, elles ne répondent pas directement à mes besoins...
Y a sans doute une façon d'arriver au résultat en "développant" une routine qui emploie ces fonctions... Mais je me demande s'il n'existe pas d'autres fonctions qui feraient tout, ou quasisment, "nativement".

C'est ce type de fonctions que je recherche en fait...


SuperPJ
WRInaute impliqué
WRInaute impliqué
 
Messages: 513
Inscription: 15 Jan 2005

Message le Jeu Mai 04, 2006 17:09

nza2k a écrit:- $ecole['classe']['0']['eleve']='10';
- $ecole['classe']['1']['eleve']='20';
- $ecole['classe']['2']['eleve']='3';
- $ecole['classe']['3']['eleve']='1';

- $ecole['classe']['0']['professeur']='2';
- $ecole['classe']['1']['professeur']='3';
- $ecole['classe']['2']['professeur']='1';
- $ecole['classe']['3']['professeur']='1';

J'aimerais maintenant que PHP m'affiche les classes en les triant par nombre d'élèves :
1 élève et 1 professeur dans la classe 0 (qui était initialement la classe 3)
3 élèves et 1 professeur dans la classe 1 (qui était initialement la classe 2)
etc...


Salut, voici ce que je ferais :
Code: Tout sélectionner
<?

$ecole['classe']['0']['eleve'] = '10';
$ecole['classe']['1']['eleve'] = '20';
$ecole['classe']['2']['eleve'] = '3';
$ecole['classe']['3']['eleve'] = '1';

$ecole['classe']['0']['professeur'] = '2';
$ecole['classe']['1']['professeur'] = '3';
$ecole['classe']['2']['professeur'] = '1';
$ecole['classe']['3']['professeur'] = '1';

$dernier_index = count($ecole['classe']) - 1;


for( $i=0; $i<=$dernier_index; $i++ )
{
   $eleves[] = $ecole['classe']["$i"]['eleve'];
   $professeurs[] = $ecole['classe']["$i"]['professeur'];
};

sort( $eleves );
sort( $professeurs );


for( $i=0; $i<=$dernier_index; $i++ )
{
   $ecole['classe']["$i"]['eleve'] = $eleves["$i"];
   $ecole['classe']["$i"]['professeur'] = $professeurs["$i"];
};

print_r($ecole);


/********** TABLEAU OBTENU **********
Array
(
    [classe] => Array
        (
            [0] => Array
                (
                    [eleve] => 1
                    [professeur] => 1
                )

            [1] => Array
                (
                    [eleve] => 3
                    [professeur] => 1
                )

            [2] => Array
                (
                    [eleve] => 10
                    [professeur] => 2
                )

            [3] => Array
                (
                    [eleve] => 20
                    [professeur] => 3
                )

        )

)
*/

?>


Il y a peut-être plus simple mais cette solution est fonctionnelle :P


nza2k
WRInaute impliqué
WRInaute impliqué
 
Messages: 771
Inscription: 16 Jan 2004

Message le Jeu Mai 04, 2006 23:00

Merci beaucoup SuperPJ !

Si je ne trouve pas plus simple, je m'inspirerai de ton code !


Bonne nuit


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités