Puede usar la construcción de lenguaje isset
, o la función array_key_exists
.
isset
debería ser un poco más rápido (ya que no es una función), pero volverá falso si el elemento existe y tiene el valor NULL
.
Por ejemplo, teniendo en cuenta esta matriz:
$a = array(
123 => 'glop',
456 => null,
);
Y esas tres pruebas, confiando en isset
:
var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));
El primero le conseguirá (existe el elemento, y es no nulo):
boolean true
mientras que el segundo le conseguirá (el elemento existe, pero es nulo):
boolean false
Y el último le conseguirá (el elemento no existe):
boolean false
Por otro lado, el uso de array_key_exists
así:
var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));
se obtendría esas salidas:
boolean true
boolean true
boolean false
Debido a que, en los dos primeros casos, existe el elemento - incluso si es nulo en el segundo caso. Y, por supuesto, en el tercer caso, no existe.
Para situaciones como la suya, por lo general utilizo isset
, teniendo en cuenta que nunca estoy en el segundo caso ... pero la elección de cuál utilizar depende ahora de que ;-)
Por ejemplo, su código podría llegar a ser algo como esto:
if (!isset(self::$instances[$instanceKey])) {
$instances[$instanceKey] = $theInstance;
}
Tengo que quejarse porque 'isset' es typo-inseguro. Llamado '$ form = [1 => 5]; var_dump (isset ($ from [1])); 'returns' false', ya que '$ from' no existe y usted ni siquiera es notificado por' E_NOTICE'. Más lento, pero más seguro 'array_key_exists' hacer las cosas por mí. – hejdav