7
votes

Trier PHP par ordre arbitraire

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.

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?

merci xxx


2 commentaires

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 , deux parenthèses de clôture au lieu d'un pour $ i


4 Réponses :


1
votes
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.

1 commentaires

Je l'ai modifié, alors essayez-le à nouveau si cela n'a pas fonctionné.



1
votes

Probablement plus lente que la solution de Headshota, mais simplement pour vous fournir une autre possibilité (non testée): xxx


0 commentaires

13
votes

php fournit le USort () et uksort () fonctionne pour vous permettre d'écrire vos propres routines de tri. De ces deux, vous aurez envie de USort () .

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 USort () 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.

Donc Ecrivez quelque chose comme ça .... xxx

... puis appelez simplement USORT ($ INPORTARRAY, "myCompare"); pour les trier.


0 commentaires

0
votes
// 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']);

2 commentaires

Qu'est-ce que $ trient_array ?


Oh, c'est moi qui me gâche.