variable sirve significa que para empty and php

php - sirve - Diferencia entre isset y array_key_exists



php isset post var (8)

Complementando (como una curiosidad algebraica) la respuesta de @deceze con el operador @ , e indicando casos donde es "mejor" usar @ ... No es realmente mejor si necesita (sin registro y) optimización de micro-rendimiento:

  • array_key_exists : es verdadero si existe una clave en una matriz;
  • isset : es true si la clave / variable existe y no es null [ más rápido que array_key_exists ];
  • @$array[''key''] : es true si la clave / variable existe y no es ( null o '''' o 0) ; [mucho más lento?]

$a = array(''k1'' => ''HELLO'', ''k2'' => null, ''k3'' => '''', ''k4'' => 0); print isset($a[''k1''])? "OK $a[k1].": ''NO VALUE.''; // OK print array_key_exists(''k1'', $a)? "OK $a[k1].": ''NO VALUE.''; // OK print @$a[''k1'']? "OK $a[k1].": ''NO VALUE.''; // OK // outputs OK HELLO. OK HELLO. OK HELLO. print isset($a[''k2''])? "OK $a[k2].": ''NO VALUE.''; // NO print array_key_exists(''k2'', $a)? "OK $a[k2].": ''NO VALUE.''; // OK print @$a[''k2'']? "OK $a[k2].": ''NO VALUE.''; // NO // outputs NO VALUE. OK . NO VALUE. print isset($a[''k3''])? "OK $a[k3].": ''NO VALUE.''; // OK print array_key_exists(''k3'', $a)? "OK $a[k3].": ''NO VALUE.''; // OK print @$a[''k3'']? "OK $a[k3].": ''NO VALUE.''; // NO // outputs OK . OK . NO VALUE. print isset($a[''k4''])? "OK $a[k4].": ''NO VALUE.''; // OK print array_key_exists(''k4'', $a)? "OK $a[k4].": ''NO VALUE.''; // OK print @$a[''k4'']? "OK $a[k4].": ''NO VALUE.''; // NO // outputs OK 0. OK 0. NO VALUE

PD: puedes cambiar / corregir / complementar este texto, es un Wiki.

¿Cómo se comparan las siguientes dos funciones de llamada:

isset($a[''key'']) array_key_exists(''key'', $a)


Entre array_key_exists y isset , aunque ambos son muy rápidos [O(1)] , isset es significativamente más rápido. Si esta comprobación se realiza muchos miles de veces, querrá utilizar isset .

Debe tenerse en cuenta que no son idénticos, sin embargo, cuando la clave de matriz existe pero el valor es null , el isset devolverá false y array_key_exists devolverá true . Si el valor puede ser null , debe usar array_key_exists .



La función PHP array_key_exists() determina si existe una clave en particular, o un índice numérico, para un elemento de una matriz. Sin embargo, si desea determinar si una clave existe y está asociada con un valor , el lenguaje de construcción de PHP isset() puede indicarle eso (y que el valor no es null ). array_key_exists() no puede devolver información sobre el valor de una clave / índice.


La principal diferencia cuando se trabaja en arreglos es que array_key_exists devuelve true cuando el valor es null , mientras que el isset devolverá false cuando el valor del arreglo se establece en null .

Vea el isset en el sitio de documentación de PHP.



array_key_exists definitivamente te dirá si existe una clave en una matriz, mientras que isset solo devolverá true si la clave / variable existe y no es null .

$a = array(''key1'' => ''フーバー'', ''key2'' => null); isset($a[''key1'']); // true array_key_exists(''key1'', $a); // true isset($a[''key2'']); // false array_key_exists(''key2'', $a); // true

Hay otra diferencia importante. isset no se queja cuando $a no existe, mientras que array_key_exists sí.


Responda a una pregunta anterior , ya que aquí no hay respuesta parece abordar el problema de la "advertencia" (a continuación se explica)

Básicamente, en este caso de comprobar si existe una clave en una matriz, isset

  • indica si la expresión (matriz) está definida y la clave está establecida
  • no hay advertencia o error si la var no está definida, no es una matriz ...
  • pero devuelve false si el valor de esa clave es nulo

y array_key_exists

  • indica si existe una clave en una matriz como su nombre lo indica
  • pero da una advertencia si el parámetro de matriz no es una matriz

Entonces, ¿cómo comprobamos si existe una clave cuyo valor puede ser nulo en una variable?

  • que puede o no ser una matriz
  • (o similarmente es una matriz multidimensional para la cual la verificación de clave ocurre en dim 2 y dim 1 el valor puede no ser una matriz para la dim (etc ...))

sin recibir una advertencia, sin perder la clave existente cuando su valor es nulo (lo que pensaban los desarrolladores de PHP también sería una pregunta interesante, pero ciertamente no es relevante en SO). Y, por supuesto, no queremos usar @

isset($var[$key]); // silent but misses null values array_key_exists($key, $var); // works but warning if $var not defined/array

Parece que is_array debería estar involucrado en la ecuación, pero da una advertencia si $var no está definido, por lo que podría ser una solución:

if (isset($var[$key]) || isset($var) && is_array($var) && array_key_exists($key, $var)) ...

que es probable que sea más rápido si las pruebas son principalmente en valores no nulos. De lo contrario para una matriz con valores mayormente nulos

if (isset($var) && is_array($var) && array_key_exists($key, $var)) ...

Hará el trabajo.