[PHP] tri sur plusieurs array multidimentionels

tri sur plusieurs array multidimentionels [PHP] - PHP - Programmation

Marsh Posté le 31-12-2011 à 05:09:21    

Bonjour a tous,

 

Je me trouve face a un probleme, qui ne s'est jamais posé avant.. et j'avoue que je peche  malgres pas mal de recherches comme array_multisort (mais je vois trop comment l'utiliser dans mon cas...)...

 

j'ai plusieurs arrays exemple :
<code>
[abricotier] => Array
        (
            [adultes] => 12 (nb d'abricotiers adultes)
            [pousses] => 18 (nb d'abricotiers qui viennent d'etre plantés)
            [Total] => 30 (total d'abricotiers)
        )

 

   [framboisier] => Array
        (
            [adultes] => 1
            [pousses] => 0
            [Total] => 1
        )

 

   [fraisier] => Array
        (
            [adultes] => 4
            [pousses] => 3
            [Total] => 7
        )
</code>

 

j'aimerai avoir la possibilité de trier de 3 façons :
- trier les arbres qui ont le plus de plans adultes
- trier les arbres qui sont le plus en train de pousser
- trier suivant le total de chaque arbres

 

actuellement, je passe en $_GET['tri'] soit 'adultes', soit 'pousses', soit 'Total'

 

suis-je obligé de recreer un nouvel array pour le reinjecter apres dans mes array originaux ?
array_multisort ne me permet t'elle pas de trier selon 3 keys ?

 

j'avoue que je ne sais pas trop vers quoi m'orienter malgres mes différents test qui ne donnent rien du tout...

 

si vous avez une petite idée, je prendrai bien volontiers !
merci d'avance, et de tres bonnes fetes a tous !


Message édité par jcdweb le 31-12-2011 à 05:17:33
Reply

Marsh Posté le 31-12-2011 à 05:09:21   

Reply

Marsh Posté le 31-12-2011 à 19:13:29    

Reply

Marsh Posté le 04-01-2012 à 09:02:11    

Merci pour ta réponse, mais je ne souhaite pas trier l'ensemble du tableau, juste déplacer l'une des clé (une seule) et laisser les autres dans l'ordre attribué...
Donc usort ne semble pas la réponse ;)
 
EDIT : en plus, usort détruit les clés, ce que je veux éviter à tout prix...

Message cité 1 fois
Message édité par mdc888 le 04-01-2012 à 09:28:00
Reply

Marsh Posté le 06-01-2012 à 13:16:45    

Normalement ça devrait marché avec quelque chose de se genre ?
 

Code :
  1. // Le tableau contenant des arbres
  2. $arbres = array(LA LISTE DE TES ARBRES);
  3. // La colonne de tri
  4. $tri = $_GET['tri'];
  5. // Tableau temporaire contenant les données de la colonne de tri
  6. $sort = array();
  7. foreach ($arbres as $nom => $detail) {
  8.   $sort[$nom] = $detail[$tri];
  9. }
  10. // Tri les arbres
  11. array_multisort($sort, SORT_ASC, $arbres);


 
Bien sur il manque la vérification comme quoi la colonne existe est autorisé et existe bien dans les sous tableaux...


Message édité par kyodenball le 06-01-2012 à 13:18:19
Reply

Marsh Posté le 10-01-2012 à 01:56:16    

mdc888 a écrit :

Merci pour ta réponse, mais je ne souhaite pas trier l'ensemble du tableau, juste déplacer l'une des clé (une seule) et laisser les autres dans l'ordre attribué...
Donc usort ne semble pas la réponse ;)
 
EDIT : en plus, usort détruit les clés, ce que je veux éviter à tout prix...


 
uasort() conserve les clefs
 

Code :
  1. function cmp_adultes($a, $b) {
  2.     if ($a['adultes'] == $b['adultes']) {
  3.         return 0;
  4.     }
  5.     return ($a['adultes'] < $b['adultes']) ? -1 : 1;
  6. }
  7. uasort($arbres, "cmp_adultes" );



---------------
Plop !
Reply

Marsh Posté le 12-01-2012 à 16:43:42    

c'est array_multi_sort à priori qu'il faut utiliser en créant un tableau temporaire de cle de tri.
 

Code :
  1. public function sort($array, $attribute, $order = SORT_ASC)
  2. {
  3.     // Creating sorting array...
  4.     $sortArray = array();
  5.     foreach ($array as $item) {
  6.         $sortArray[] = $item[$attribute];
  7.     }
  8.     // Sorting data...
  9.     array_multisort($sortArray, $order, $this->_data);
  10.     unset($sortArray);
  11. }



Message édité par MEI le 12-01-2012 à 16:46:18

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed