Array sort PHP
Résolu
Jeronimo
-
Jeronimo -
Jeronimo -
Bonjour,
J'ai une énigme pour vous chère codeur PHP
j'ai un table de cette sorte:
J'aimerais trier ce tableau de cette façon:
En fonction des noms (index 0 des 2ème tableaux) attribuer l'ID du tableau dans lequel ils se trouvent ce qui donnerait:
Merci d'avance pour vos solutions, ou astuces.
J'ai une énigme pour vous chère codeur PHP
j'ai un table de cette sorte:
Array ( [1] => Array ( [0] => Grospierre Jérémy [id] => 15 [1] => 2.50 [3] => 3.00 [4] => 1.00 [5] => 4.50 ) [2] => Array ( [0] => Ambrosio david [id] => 18 [2] => 3.00 ) )
J'aimerais trier ce tableau de cette façon:
En fonction des noms (index 0 des 2ème tableaux) attribuer l'ID du tableau dans lequel ils se trouvent ce qui donnerait:
Array ( [1] => Array ( [0] => Ambrosio david [id] => 18 [2] => 3.00 ) [2] => Array ( [0] => Grospierre Jérémy [id] => 15 [1] => 2.50 [3] => 3.00 [4] => 1.00 [5] => 4.50 ) )
Merci d'avance pour vos solutions, ou astuces.
2 réponses
-
Bonjour
La fonction uksort tes permet de faire ce genre de chose. Tu définis une fonction de comparaison dans laquelle tu compares selon tes propres critères, et qui rend -1,0 ou 1 selon que le 1er argument est <, = ou > au second
<?php function MaComparaison ($a,$b) { if ($a[0]==$b[0]) return 0; return ($a[0] > $b[0]) ? 1 : -1; } $tbl= Array ( 1=>Array ( 0 => 'Grospierre Jérémy' ,'id' => 15, 1 => 2.50 ,3 => 3.00, 4 => 1.00 ,5 => 4.50 ), 2=>Array ( 0 => 'Ambrosio david', 'id' => 18, 2 => 3.00 ) ) ; uksort ($tbl,"MaComparaison"); print_r($tbl); ?>
petit inconvénient : l'indice de premier niveau n'est pas celui que tu veux. Il suit le mouvement du tri. Si tu tiens à avoir des indices croissants, il suffit de balayer le tableau avec un foreach et de réattribuer les bons indices (sur une copie du tableau) -
Merci pour votre solution mais il est possible que le tableau aie plusieurs sous-tableau:
Array ( [1] => Array ( [0] => Grospierre Jérémy [id] => 15 [1] => 2.50 [3] => 3.00 [4] => 1.00 [5] => 4.50 ) [2] => Array ( [0] => Ambrosio david [id] => 18 [2] => 3.00 ) [3] => Array ( [0] => Zakari Olivier [id] => 42 [2] => 1.00 ) [4] => Array ( [0] => Gentil david [id] => 6 [2] => 7.00 ) )
Votre solution est-t-elle encore applicable ?
Merci