que quería añadir mis 2 centavos sobre esta cuestión, ya que me estaba perdiendo un camino intermedio a cabo.
Como ya se dijo isset()
evaluará el valor de la clave para que vuelva false
si ese valor es null
donde array_key_exists()
sólo se comprobará si existe la clave de la matriz.
he corrió un punto de referencia simple usando PHP 7, los resultados que se muestran es el tiempo que se tardó en terminar 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
He añadido los resultados de esta función personalizada con esta punto de referencia, así de ejecución:
function array_key_isset($k, $a){
return isset($a[$k]) || array_key_exists($k, $a);
}
como se ve, y ya se dijo isset()
es fas método de prueba pero puede devolver falso si el valor es null
. Esto podría dar resultados no deseados y generalmente uno debería usar array_key_exists()
si ese es el caso.
Sin embargo, hay una salida intermedia y está usando isset() || array_key_exists()
. Este código es generalmente más rápido utilizando la función isset()
y si isset()
vuelve falsa sólo entoncesarray_key_exists()
uso para validar. Se muestra en la tabla anterior, es tan rápido como llamar directamente al isset()
.
Sí, es un poco más escribir y ajustarlo en una función es más lento pero mucho más fácil. Si necesita esto para el rendimiento, verificando datos grandes, etc., escríbalo completo; de lo contrario, si es un uso de 1 vez, esa sobrecarga muy pequeña en la función array_key_isset()
es insignificante.
¿Has probado * qué es más rápido? – Tomalak
No ejecuté ningún punto de referencia, no. ¿Debería haberlo hecho antes? – alex
'isset' nunca se comportará exactamente como' array_key_exists', el ejemplo de código que supuestamente hace que se comporte de manera idéntica arroja un Aviso si la clave no existe. – deceze