sandrinoo Posté 30 Août 2022 Partager Posté 30 Août 2022 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 ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
BlackPage Posté 30 Août 2022 Partager Posté 30 Août 2022 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; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
sandrinoo Posté 30 Août 2022 Auteur Partager Posté 30 Août 2022 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
sandrinoo Posté 30 Août 2022 Auteur Partager Posté 30 Août 2022 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
sandrinoo Posté 1 Septembre 2022 Auteur Partager Posté 1 Septembre 2022 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant