[spip-dev] Tri d'un #ARRAY selon les valeurs

Bonjour,

Je rempli un tableau associatif #ARRAY avec le filtre array_merge, et je voudrais le trier selon les valeur et non les clés, donc j’essaie la fonction asort, mais ça plante sans erreur visible à priori.

Je ne sais pas si quelqu’un s’est déjà penché sur la question.

-Nicolas

ben oui.
asort retourne true ou false, pas le array lui-même.

il faut donc redéfinir et remplir un nouvel array :

function spip_asort($array) {
   if (is_array($array)) {
     asort($array);
     foreach($array as $k => $v) {
       $array_order[$k] = $v;
     }
     return $array_order;
   }
   return $array;
}

testé avec :

   #SET{tab1, #ARRAY{k0,c,k1,a,k2,d,k3,b}}
   [(#GET{tab1}|foreach)]
   <hr>
   #SET{tab2, #GET{tab1}|spip_asort}
   [(#GET{tab2}|foreach)]

Salut !

Je rempli un tableau associatif #ARRAY avec le filtre array_merge, et je voudrais le trier selon les valeur et non les clés, donc j'essaie la fonction asort, mais ça plante sans erreur visible à priori.

Il me semble que j'ai eu le même souci plusieurs fois (voir sur Spip
Contrib là Contrib sur les articles connexes:
Afficher les articles connexes, triés par pertinence - SPIP-Contrib ).

Ma solution est de faire un filtre perso "mon_asort":

<?php
//Trie un tableau en fonction de ses valeurs
//Est nécessaire, car [(#GET{un_tableau}|asort)] ne semble pas fonctionner
function mon_asort ($tableau) {
        asort ($tableau);
        return $tableau;
}
?>

oui bien sûr !
(mais pourquoi je suis allé me compliquer la vie moi ?)

:frowning:

J'étais en train de me creuser la tête sur ton code en me demandant ce
qu'il faisait de plus que le mien... :slight_smile:

un emberlificotillon (de noël)...

du coup inutile de redéfinir un deuxième tableau :

function spip_asort($array) {
   // eviter un warning si $array n'est pas un array (hum...)
   if (is_array($array)) {
     asort($array);
   }
   return $array;
}

avec :

#SET{tab, #ARRAY{k0,c,k1,a,k2,d,k3,b}}
[(#GET{tab}|foreach)]
[(#GET{tab}|spip_asort|foreach)]

2010/12/9 denisb <denisb@laposte.net>

donc j’essaie la
fonction asort, mais ça plante sans erreur visible à priori.

ben oui.
asort retourne true ou false, pas le array lui-même.

Raaaah, mais oui, bon sang !!!

Désolé, et merci à vous deux pour la solution.

Ce serait peut-être un ajout intéressant au core, non ?

2010/12/9 denisb <denisb@laposte.net>