Quería agregar mis 2 centavos en esta pregunta, ya que me faltaba una salida intermedia.
Como ya se dijo isset()
, evaluará el valor de la clave para que regrese false
si ese valor es null
donde array_key_exists()
solo verificará si la clave existe en la matriz.
Ejecuté un punto de referencia simple usando PHP 7, los resultados mostrados son el tiempo que tardó en finalizar la iteración:
$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
También agregué los resultados de esta función personalizada con este punto de referencia para completar:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
Como se ve y ya se dijo, isset()
es el método más rápido, pero puede devolver falso si el valor es null
. Esto podría dar resultados no deseados y, por lo general, uno debe usar array_key_exists()
si ese es el caso.
Sin embargo, hay una salida intermedia y que está utilizando isset() || array_key_exists()
. Este código generalmente usa la función más rápida isset()
y si isset()
devuelve falso solo se usa array_key_exists()
para validar. Se muestra en la tabla de arriba, es tan rápido como simplemente llamar isset()
.
Sí, es un poco más escribir y envolverlo en una función es más lento pero mucho más fácil. Si necesita esto para el rendimiento, la verificación de datos grandes, etc., escríbalo completo; de lo contrario, si es un uso de 1 vez, la sobrecarga muy pequeña en la función array_key_isset()
es insignificante.