Jump to content

Trier array sur string


sandrinoo
 Share

Recommended Posts

Bonjour à tous,

Quand je bloque depuis 2 heures, grrr... Voilà le souci, j'ai un array de ce type :

$table = array(
array(1,'hôtel','bleu'),
array(2,'villa','jaune'),
array(3,'appartement','rouge'),
array(4,'appartement','rose'),
array(5,'villa','vert')
);

 

Et je voudrais juste sortir en premier tous les 'appartement' (avec le reste laissé tel quel) soit comme ceci :

Array
(
    [0] => Array
        (
            [0] => 3
            [1] => appartement
            [2] => rouge
        )

    [1] => Array
        (
            [0] => 4
            [1] => appartement
            [2] => rose
        )

    [2] => Array
        (
            [0] => 1
            [1] => hôtel
            [2] => bleu
        )

    [3] => Array
        (
            [0] => 2
            [1] => villa
            [2] => jaune
        )

    [4] => Array
        (
            [0] => 5
            [1] => villa
            [2] => vert
        )

)

 

J'y arrive avec 2 foreach mais c'est un peu lourd et donc j'aurais aimé utilisé un truc plus simple comme une fonction de comparaison type cmp($a,$b)

mais je n'y suis pas arrivée et rien trouvé sur internet non plus.

 

Donc je me tourne en dernier recours vers Webmaster-Hub,

Gros merci d'avance !

Link to comment
Share on other sites

public static function sortmulti($array, $index, $order, $natsort=FALSE, $case_sensitive=FALSE){
   if(is_array($array) && count($array)>0) {
      foreach(array_keys($array) as $key)
         $temp[$key]=$array[$key][$index];
      if(!$natsort) {
         if ($order=='asc')
            asort($temp);
         else
            arsort($temp);
      } else {
         if ($case_sensitive===true)
            natsort($temp);
         else
            natcasesort($temp);

         if ($order!='asc') $temp=array_reverse($temp,TRUE);
      }

      foreach(array_keys($temp) as $key){
         if (is_numeric($key)) {
            $sorted[]=$array[$key];
         } else {
            $sorted[$key]=$array[$key];
         }
      }
      
      return $sorted;
   }
   return $array;
}
Link to comment
Share on other sites

Merci beaucoup Blackpage mais je m'y prends comment pour remplir la fonction :

 

sortmulti($table, ?, ?,?,?);

 

désolée, mais je suis pas une pro du php (je bidouille encore en procédural plus rapide pour de petits sites)

 

En plus il y aurait pas plus simple car si on utilise 2 foreach autant faire non ? :

 

foreach($table as $item){
	if ($item[1]=='appartement') {echo $item[1]; }}
	foreach($table as $item){
	if ($item[1]!='appartement') {echo $item[1]; }}

 

Dis moi si je s-dis une bêtise ?

Link to comment
Share on other sites

Moi ce que j'aurais voulu c'est une fonction simple de comparaison du type :

 

cmp($a,$b) {if($a[1]===$b[1]) return 0;return ($a[1]>$b[1])? -1 : 1;} puis usort($table,'cmp');

 

Mais bien sûr pas celle-là qui sert à trier par ordre décroissant des valeurs numériques.

 

C'est pas possible pour faire ce que je veux ?

Link to comment
Share on other sites

Bon ben une fonction de comparaison sans foreach dedans

pour classer en premier les résultats sur un élément string ça doit pas être trop faisable en fait...

Merci à vous.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...