[RESOLU] Trier un tableau ( 2 dimensions) en fonction de la ligne puis de la colonne

Eléphanteau du PHP | 11 Messages

11 avr. 2019, 11:12

Bonjour à tous,

Je suis nouveau sur le site et débutant en PHP, je vous remercie par avance pour votre aide.

Donc voila, j'ai programmé un tableau à deux dimensions, 6 lignes et 10 colonnes avec dans une ligne ( le nom d’élève suivi de 9 notes aléatoires ) .

Dans la première colonne j'ai mis le nom des élèves avec ce code :

$tableau[][]="Toto";
$tableau[][ ]="Julien";
$tableau[][]="Renaud";
$tableau[][]="Dimitri";
$tableau[][]="Maciej";
$tableau[][]="Martine";

Ensuite pour chaque élèves je donne 9 notes aléatoires avec ce code :

for ($i=0 ; $i <= 5; $i++ )
{

for ($z=1 ; $z <= 9; $z++ )
{

$tableau[$i][$z]= rand(0, 20);

}
}



Voila ce qui s'affiche :

toto 13 14 2 14 5 10 18 10 4
julien 6 17 20 11 15 8 14 17 10
renaud 16 3 19 20 1 18 6 7 1
dimitri 20 15 3 10 2 13 14 20 14
maciej 13 3 6 4 20 13 9 6 12
martine 11 19 10 5 13 12 5 6 4


Par la suite je trie mon tableau en utilisant ce code : array_multisort( $tableau ) et voila ce qui s'affiche ;

dimitri 19 10 9 10 10 16 8 20 3
julien 13 19 17 15 6 3 20 17 1
maciej 18 13 17 11 10 12 13 12 14
martine 4 3 4 1 0 14 0 18 7
renaud 18 9 17 13 12 20 20 12 13
toto 4 6 15 0 7 3 5 13 20

J'ai donc bien un tri en fonction de ma première colonne mais je souhaiterais également que pour chaque élève, les notes soient triés par ordre croissant, j'ai beau cherché sur le net impossible de trouver quelque chose de concret, j'ai essayé usort , sort , arsort , ksort , une continuité de foreach et un tas d'autres choses mais impossible d'obtenir le tri par colonne et ensuite par ligne.

Merci à vous et bon courage

Mammouth du PHP | 1967 Messages

11 avr. 2019, 13:39

voici ce que je ferai
<?php
$tableau["Toto"] = [];
$tableau["Julien"] = [];
$tableau["Renaud"] = [];
$tableau["Dimitri"] = [];
$tableau["Maciej"] = [];
$tableau["Martine"] = [];

foreach ($tableau as $eleve => $notes)
{

for ($z=1 ; $z <= 9; $z++ )
{

$tableau[$eleve][$z]= rand(0, 20);

} 
sort($tableau[$eleve]);
}
ksort($tableau);

var_dump($tableau);
en premier lieu, placer le nom de l'élève en clé, plus pratique pour ne pas confondre les notes mais contraignant car 21 élèves ne peuvent pas avoir le même noms

ensuite juste après la génération de toutes les notes d'un élève je les classe
je fini par classer le tableau par les clés.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 11 Messages

11 avr. 2019, 14:22

Parfait, c'est exactement ce que je cherchais =D> =D>

Merci à toi et bon courage pour la suite :)