Question

fait référence à une de mes questions précédentes: array_unique vs array_flip - Ce états que array_flip(array_flip()) est beaucoup plus rapide que array_unique() lorsqu'ils traitent avec des chaînes simples et entiers.

Ce que je voudrais savoir pourquoi array_unique() crée une copie du tableau, les trie ensuite retiré la doublons

La source pour les deux fonctions est disponible ici .

Merci à l'avance!

Était-ce utile?

La solution

Si vous pensez à ce sujet algorithmiquement, la façon de supprimer les doublons est de passer par une liste, garder une trace des articles que vous trouvez, et se débarrasser des choses qui sont déjà dans cette « trouvé cette » liste. Un moyen facile d'y arriver est de trier une liste. De cette façon, il est évident où supprimer les doublons efficacement. Pensez à vous, et encore moins un ordinateur; dont l'une de ces listes est plus facile de supprimer les doublons de?

apple
banana
cantaloupe
apple
durian
apple
banana
cantaloupe

ou

apple
apple
apple
banana
banana
cantaloupe
cantaloupe
durian

Modifier Après avoir examiné un peu (et trouver cet article ), il ressemble alors que les deux à la fois faire le travail fait, ils ne sont pas fonctionnellement équivalents, ou du moins ils ne sont pas toujours. Pour paraphraser un couple de ces points:

  1. array_unique () trie les valeurs, comme vous l'avez dit, si array_flip (array_flip ()) ne retourne le tableau de même ordre -. Mais cela pourrait désirer
  2. Si les valeurs sont des objets, vous ne pouvez pas les rendre clés (à droite?), À savoir la méthode chiquenaude ne fonctionnerait pas hors de la boîte sur tous les tableaux, alors que la méthode de tri fonctionne très bien, quel que soit les types de valeur.

Autres conseils

Je pense que Dan Fego a donné une merveilleuse réponse à pourquoi on trier un tableau avant la suppression des doublons; cependant, je voudrais examiner ce array_flip() fait. Je vais utiliser le tableau suivant pour illustrer:

'a' => 'apple'
'b' => 'banana'
'c' => 'apple'
'd' => 'date'

array_flip() exhanges les clés et les valeurs de production

'apple'  => 'a'
'banana' => 'b'
'apple'  => 'c'
'date'   => 'd'

Cependant, les clés doivent être uniques. manuel décrit les poignées de array_flip() ceci:

Si une valeur a plusieurs occurrences, la dernière clé sera utilisée comme les valeurs et tous les autres seront perdus.

Nous obtenons donc quelque chose comme ceci:

'banana' => 'b'
'apple' => 'c'
'date' => 'd'

Donc, si nous utilisons array_flip(array_flip()) nous obtenons:

'b' => 'banana'
'c' => 'apple'
'd' => 'date'

En ce qui concerne la motivation derrière array_unique(), nous ne pouvons que spéculer à moins que Rasmus Lerdorf ou quelqu'un qui travaille actuellement sur le développement de soins PHP pour répondre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top