Comment trier en php un tableau multidimensionnel ?

  • Auteur de la discussion Auteur de la discussion nza2k
  • Date de début Date de début
WRInaute impliqué
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 !
 
WRInaute discret
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
 
WRInaute impliqué
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...
 
WRInaute occasionnel
nza2k a dit:
- $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:
<?

$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
 
WRInaute impliqué
Merci beaucoup SuperPJ !

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


Bonne nuit
 
Discussions similaires
Haut