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 falsesi ese valor es nulldonde 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.