Aller au contenu

Sujets conseillés

Posté

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 !

Posté
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;
}
Posté

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 ?

Posté

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 ?

Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...