8
votes

Question de performance PHP: plus rapide de laisser des doublons dans la matrice qui sera recherché ou faire array_unique?

J'ai un code qui ajoute des valeurs à un tableau. Le tableau est plus tard recherché dans une autre partie de mon code. Les valeurs ajoutées à la matrice ne sont pas nécessairement uniques, il est donc possible de finir avec des valeurs en double dans le tableau à la recherche. Techniquement, parlant, même avec les duplicats présents dans le tableau en cours de recherche, mon code fonctionne bien et je pourrai trouver la valeur. Je veux juste savoir si la valeur est dans le tableau en cours de recherche et que vous ne vous souciez pas si c'est dans le tableau 1 fois ou 10 000 fois.

Ma question est de savoir s'il est préféré (pour des raisons de performance et / ou de style) à DO Array_unique () sur mon tableau en cours d'exécution avant que je fasse la recherche. p>

donc, supposons que je souhaite rechercher un tableau comme ceci: strong> p>

$searchMe_cleaned = array_unique($searchMe);


0 commentaires

3 Réponses :



3
votes

Array_unique est sur sqrt (n) fois plus lent puis in_array. Mais si vous optimisez les données et recherchez à nouveau de nombreuses fois, cela peut valoir la valeur

PS: Notez que

émetteur ($ arr [$ clé])

fonctionne plus rapidement que in_array fournissant le même résultat


0 commentaires

11
votes

Cette Commentaire était digne d'être promu à une réponse:

vient de trouver que array_keys (array_flip ($ array)); est incroyablement plus rapide que array_unique (); . Environ 80% plus rapidement sur 100 éléments d'élément, 95% plus rapidement sur une matrice d'élément de 1000 et 99% plus rapidement sur 10 000 étages.

tester ici montre qu'avec des chaînes aléatoires (entier) qui contiennent la répétition de la valeur de la matrice, que Array_Keys (Array_flip ($ Array)); La méthode est Commandes de magnitude plus rapidement que les autres méthodes.


1 commentaires

J'ai ajouté un de plus en cela, array_flip (array_flip ($ array)); , dont la performance est au pair avec Array_Keys / Array_flip . Parfois, on est plus rapide, parfois l'autre - mais bien sûr, les deux toujours plus rapides que les autres alternatives.