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>
$searchMe_cleaned = array_unique($searchMe);
3 Réponses :
Je pense Une autre option consiste à utiliser array_unique code> est plus lent que in_array code> mais c'est logique si vous souhaitez rechercher plus d'une fois ou si vous souhaitez enregistrer la mémoire. P >
array_flip code> < / a> (qui supprimera également les touches en double), puis utilisez isset code> ou array_key_existes code> car ils sont bien plus rapides que in_array code>, personnellement, je voudrais aller de cette façon. p>
Grande suggestion! J'aime comment Array_flip supprime intrinsèquement des doublons tout en vous permettant d'utiliser la fonction ESSET () plus rapide ().
Vient de trouver que array_keys (array_flip ($ array)); code> est incroyablement plus rapide que array_unique (); code>. Environ 80% plus rapide sur 100 éléments d'élément, 95% plus rapidement sur une matrice d'élément de 1000 et 99% plus rapidement sur une matrice d'élément de 10000+.
@Carlos Je viens de découvrir la même chose pour que je puisse confirmer que cette technique fonctionne parfaitement!
Veuillez également noter que array_keys (array_flip ($ array)) code> est plus rapide que pour les entiers. Voir net-beta.net/ubench/index.php?t=array11 A> et net-beta.net/ubench/index.php?t=array13 pour les repères
Array_unique est sur PS: Notez que P>
émetteur ($ arr [$ clé]) p>
blockQuote>
fonctionne plus rapidement que sqrt (n) code> fois plus lent puis in_array. Mais si vous optimisez les données et recherchez à nouveau de nombreuses fois, cela peut valoir la valeur p>
in_array code> fournissant le même résultat p>
Cette Commentaire était digne d'être promu à une réponse: p>
vient de trouver que
array_keys (array_flip ($ array)); code> est incroyablement plus rapide quearray_unique (); code>. 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. p> blockQuote>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)); Code> La méthode est Commandes de magnitude em> plus rapidement que les autres méthodes. p>
J'ai ajouté un de plus en cela, array_flip (array_flip ($ array)); code>, 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.