sandrinoo Posted August 30, 2022 Share Posted August 30, 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 ! Link to comment Share on other sites More sharing options...
BlackPage Posted August 30, 2022 Share Posted August 30, 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; } Link to comment Share on other sites More sharing options...
sandrinoo Posted August 30, 2022 Author Share Posted August 30, 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 ? Link to comment Share on other sites More sharing options...
sandrinoo Posted August 30, 2022 Author Share Posted August 30, 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 ? Link to comment Share on other sites More sharing options...
sandrinoo Posted September 1, 2022 Author Share Posted September 1, 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now