Php Usort Array

Php Usort Array - PHP - Programmation

Marsh Posté le 25-09-2008 à 14:08:30    

Bonjour je dispose d'un array sur lequel je souhaite appliquer un critère usort ( pour redéfinir l'ordre des clés sans avoir à créer un nouveau tableau )

Code :
  1. Prenons ..
  2. $In[cle1]="bob";
  3. $In[cle2]="zorro";
  4. $In[cle3]="eponge";
  5. $In[cle4]="zoup";


Je souhaite que dans l'ordre d'un foreach, d'un print_r sur $In .. dans l'ordre
cle2,cle4, cle1,cle3
en somme dépiler les cles 2 et 4 et les mettre au sommet du tableau
( en précisant que ces clés sont textuelles et non numériques )
merci à celui qui a l'idée  :jap:


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 25-09-2008 à 14:08:30   

Reply

Marsh Posté le 25-09-2008 à 14:12:28    

usort n'applique des criters de tris que sur les valeurs, pas sur les clé

 


la seule solution pour faire ca est de sortir tes deux elements de ton tableau, puis de les remettre, mais j'ai un peu de mal a en voir la finalité

 

sinon,on a inventé, recemment, les objets pour faire des structures de données spécifiques : une classe qui va bien avec l'interface iterator, par exemple

Message cité 1 fois
Message édité par flo850 le 25-09-2008 à 14:13:14
Reply

Marsh Posté le 25-09-2008 à 14:18:05    

ok, donc rsort, unset de mes deux clés, les remettres, puis rsort à nouveau :D
il s'agit juste d'un affichage champs par champs sur 90 champs, en sortie d'une requete sql basé sur un foreach :)


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 25-09-2008 à 14:19:51    

tu as lu mon post jusqu'au bout pour choisir uniquement la solution crade ?

 

et puis une requete qui retourne 90 champs :vomi:

 

c'est bien de produire du code rapidement, masi le jour ou tu changes un champ dans  ta bdd , ton code plante


Message édité par flo850 le 25-09-2008 à 14:20:31
Reply

Marsh Posté le 25-09-2008 à 14:24:13    

J'ai regardé la classe, il y a moyen de faire bien plus court :D
[edit] j'ai trouvé, ça marche :D


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 25-09-2008 à 14:28:43    


double fail : le premier est de ne pas partager ta solution, le second est de juger qu'un code plus court est meilleur

Reply

Marsh Posté le 25-09-2008 à 14:47:28    

Non, je recherche simplement qq'un qui parvient à ce résultat avec une fonction native, bien écrite

Code :
  1. //Pour l'instant c'est moche .. mais ça passe
  2. $in[cle1]="3";
  3. $in[cle2]="1";
  4. $in[cle3]="4";
  5. $in[cle4]="2";
  6. function Organiser($array,$order){
  7.   $order=array_reverse($order,1);
  8.   $array=array_reverse($array,1);
  9.   foreach($order as $v){$val=$array[$v];unset($array[$v]);$array[$v]=$val;}
  10.   return array_reverse($array,1);
  11. }
  12. $in=Organiser($in,array("cle2","cle4" ));

Je prie les dieux de l'élégance de venir à mon secours et à m'apprendre les bonnes façons de procéder en faisant pleins d'objets sans aucune modularité ..


Message édité par grosbin le 25-09-2008 à 14:52:49

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 25-09-2008 à 14:52:48    

flo850 a écrit :

usort n'applique des criters de tris que sur les valeurs, pas sur les clé


http://fr.php.net/manual/en/function.uksort.php


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-09-2008 à 14:54:16    

merci c'est cela que je cherchais au final :)


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 25-09-2008 à 15:00:29    

c'est quand même super crade ( meme si j'avais complètement oublié uksort )

Reply

Marsh Posté le 25-09-2008 à 15:00:29   

Reply

Marsh Posté le 25-09-2008 à 15:22:54    

Je suis d'accord à 100% mais ne trouvant pas de solution plus élégante à ce jour ..  :jap:
( doit bien exister un moyen de le faire en 2 lignes, un truc natif, oublié au fin fond de le doc php, nan ? )


Message édité par grosbin le 25-09-2008 à 15:23:10

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 25-09-2008 à 15:28:37    

encore une fois, c'est pas parceque ca fait deux lignes que c'est élégant  
 
 

Reply

Sujets relatifs:

Leave a Replay

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