J'ai besoin d'une fonction dans PHP pour trier une liste de mots selon un ordre arbitraire.
Tous les mots de la liste non dans mon ordre prédéfini doivent être triés alphabétiquement à la fin de la liste. p>
ci-dessous est ma première tentative, ce n'est ni élégant ni efficace. Pouvez-vous suggérer une meilleure façon de faire la réalisation de cela? P>
merci p>
4 Réponses :
public static function sortWords($inputArray){
$order=array("Banana","Orange", "Apple", "Kiwi");
$sorted_array = array_diff($inputArray,$order);
sort($sorted_array);
$rest_array = array_intersect($order,$inputArray);
$result = array_merge($rest_array,$sorted_array);
return $result;
}
Haven't tested but try this.
Je l'ai modifié, alors essayez-le à nouveau si cela n'a pas fonctionné.
Probablement plus lente que la solution de Headshota, mais simplement pour vous fournir une autre possibilité (non testée):
php fournit le Ces deux fonctions attendent que vous écrivez une fonction autonome, qui prend en entrée deux éléments du tableau d'entrée et renvoie la ordonner qu'ils soient triés dans. La fonction Donc Ecrivez quelque chose comme ça .... p> ... puis appelez simplement USort () code> et uksort () code> fonctionne pour vous permettre d'écrire vos propres routines de tri. De ces deux, vous aurez envie de USort () code>. USort () code> exécute son propre algorithme de tri, appelant votre fonction pour établir souvent l'ordre de tri souvent au besoin jusqu'à ce qu'il ait triplé l'ensemble de la matrice. P> USORT ($ INPORTARRAY, "myCompare"); code> pour les trier. p> p>
// Doe, John L. $this->full_name = ['last_name'=>'Doe', 'first_name'=>'John', 'middle_initial'=>'L.']; // John L. Doe $this->sortByArbitraryKeys($this->full_name, ['first_name', 'middle_initial', 'last_name']);
Qu'est-ce que $ trient_array code>?
Oh, c'est moi qui me gâche.
Vous pouvez trier les deux listes (Nlogn + Mlogm Time), puis traverser les listes des matchs (n + m heure). Puisque vous devez trier quand même, c'est optimal.
Je sais que cela n'a pas d'importance pour votre question, mais vous avez une erreur dans la déclaration
pour code>, deux parenthèses de clôture au lieu d'un pour$ i