sandrinoo Posté 30 Août 2022 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 !
BlackPage Posté 30 Août 2022 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; }
sandrinoo Posté 30 Août 2022 Auteur 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 ?
sandrinoo Posté 30 Août 2022 Auteur 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 ?
sandrinoo Posté 1 Septembre 2022 Auteur 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant