Considérez ces 2 exemples ...
$key = 'jim';
// example 1
if (isset($array[$key])) {
// ...
}
// example 2
if (array_key_exists($key, $array)) {
// ...
}
Je suis intéressé à savoir si l'un ou l'autre est meilleur. J'ai toujours utilisé le premier, mais j'ai vu beaucoup de gens utiliser le deuxième exemple sur ce site.
Alors, quel est le meilleur? Plus rapide? Une intention plus claire?
php
performance
Alex
la source
la source
isset
ne se comportera jamais exactement commearray_key_exists
, l'exemple de code qui est censé le faire se comporter de manière identique lance un avis si la clé n'existe pas.in_array
? maettig.com/1397246220in_array
c'estO(n)
parce qu'il vérifie les valeurs et non les clés. Ils seront presque toujours plus lents à moins que vous ne soyezn
extrêmement petit.$array[$key] === null
?Réponses:
isset()
est plus rapide, mais ce n'est pas la même chose quearray_key_exists()
.array_key_exists()
vérifie uniquement si la clé existe, même si la valeur estNULL
.Considérant que
isset()
retournerafalse
si la clé existe et la valeur estNULL
.la source
isset
n'est pas une fonction de recherche de tableau, elle vérifie uniquement la présence d'une variable dans la table des symboles et n'itérera pas sur le tableau.array_key_exists
d'autre part, itérera / recherchera les clés dans la première dimension du tableau spécifié.array_key_exists()
je ne vérifierai que si la clé est dans le tableau, ce qui signifie qu'elle ne fera pas de recherche puisqu'il s'agit d'une table de hachage.Si vous êtes intéressé par certains tests que j'ai effectués récemment:
https://stackoverflow.com/a/21759158/520857
Résumé:
la source
Eh bien, la principale différence est que
isset()
ne reviendra pastrue
pour les clés de tableau qui correspondent à une valeur nulle, contrairementarray_key_exists()
.L'exécution d'un petit benchmark montre que
isset()
c'est plus rapide, mais ce n'est peut-être pas tout à fait exact.la source
isset($array[$i]) || $array[$i] === null
n'a pas de sens car il reviendratrue
pour chaque cas. Vous n'obtiendrez jamais fauxisset($array[$i]) || $array[$i] === null
quelles que soient les entrées.Je voulais ajouter mes 2 cents sur cette question, car il me manquait une solution intermédiaire.
Comme déjà dit
isset()
, évaluera la valeur de la clé de sorte qu'il retournerafalse
si cette valeur estnull
oùarray_key_exists()
vérifier uniquement si la clé existe dans le tableau.J'ai exécuté un benchmark simple en utilisant PHP 7, les résultats affichés sont le temps qu'il a fallu pour terminer l'itération:
J'ai également ajouté les résultats de cette fonction personnalisée avec ce benchmark pour l'achèvement:
Comme vu et déjà dit,
isset()
c'est la méthode la plus rapide, mais elle peut renvoyer false si la valeur estnull
. Cela pourrait donner des résultats indésirables et on devrait généralement l'utiliserarray_key_exists()
si tel est le cas.Cependant, il existe un moyen de sortir et qui utilise
isset() || array_key_exists()
. Ce code utilise généralement la fonction plus rapideisset()
et siisset()
renvoie false uniquement, utilisezarray_key_exists()
pour valider. Montré dans le tableau ci-dessus, c'est aussi rapide que d'appeler clairementisset()
.Oui, c'est un peu plus de l'écrire et l'encapsuler dans une fonction est plus lent mais beaucoup plus facile. Si vous en avez besoin pour les performances, la vérification des données volumineuses, etc., écrivez-le complètement, sinon si c'est une utilisation une fois, cette surcharge très mineure en fonction
array_key_isset()
est négligeable.la source
Avec Php 7 donne la possibilité d'utiliser l' opérateur Null Coalescing .
Vous pouvez donc maintenant attribuer une valeur par défaut au cas où la valeur serait nulle ou si la clé n'existe pas:
la source
il y a une différence avec php.net que vous lirez:
Un test très informel se révèle
array_key_exists()
environ 2,5 fois plus lent queisset()
la source
La combinaison
isset()
etis_null()
donner les meilleures performances par rapport à d' autres fonctions telles que :array_key_exists()
,isset()
,isset()
+array_key_exists()
,is_null()
,isset()
+is_null()
, la seule question ici est la fonction non seulement return false si la clé n'existe pas, mais même la clé et exist a une valeur nulle.Script de référence:
Crédit : http://www.zomeoff.com/php-fast-way-to-determine-a-key-elements-existance-in-an-array/
la source
Quant à "plus rapide": essayez-le (mon argent est allumé
array_key_exists()
, mais je ne peux pas l'essayer pour le moment).Quant à "plus clair dans l'intention":
array_key_exists()
la source
De toute évidence, le deuxième exemple est plus clair dans l'intention, cela ne fait aucun doute. Pour comprendre ce que fait l'exemple n ° 1, vous devez vous familiariser avec les idiosyncraties d'initialisation des variables de PHP - et vous découvrirez ensuite qu'il fonctionne différemment pour les valeurs nulles, et ainsi de suite.
Quant à savoir lequel est le plus rapide - je n'ai pas l'intention de spéculer - exécutez non plus en boucle serrée quelques centaines de milliers de fois sur votre version PHP et vous le saurez :)
la source
Votre code
isset($array[$i]) || $array[$i] === null
,, retournera true dans tous les cas, même si la clé n'existe pas (et produira un avis d'index non défini). Pour les meilleures performances, ce que vous voulezif (isset($array[$key]) || array_key_exists($key,$array)){doWhatIWant();}
la source
$array[$i] === null
sera exécutée lorsque $ i existe dans le tableau et a la valeur NULL ..