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 retournera false
si cette valeur est null
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:
$a = [null, true];
isset($a[0]) # 0.3258841 - false
isset($a[1]) # 0.28261614 - true
isset($a[2]) # 0.26198816 - false
array_key_exists(0, $a) # 0.46202087 - true
array_key_exists(1, $a) # 0.43063688 - true
array_key_exists(2, $a) # 0.37593913 - false
isset($a[0]) || array_key_exists(0, $a) # 0.66342998 - true
isset($a[1]) || array_key_exists(1, $a) # 0.28389215 - true
isset($a[2]) || array_key_exists(2, $a) # 0.55677581 - false
array_key_isset(0, $a) # 1.17933798 - true
array_key_isset(1, $a) # 0.70253706 - true
array_key_isset(2, $a) # 1.01110005 - false
J'ai également ajouté les résultats de cette fonction personnalisée avec ce benchmark pour l'achèvement:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Comme vu et déjà dit, isset()
c'est la méthode la plus rapide, mais elle peut renvoyer false si la valeur est null
. Cela pourrait donner des résultats indésirables et on devrait généralement l'utiliser array_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 rapide isset()
et si isset()
renvoie false uniquement, utilisez array_key_exists()
pour valider. Montré dans le tableau ci-dessus, c'est aussi rapide que d'appeler clairement isset()
.
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.