Как проверить, существует ли элемент массива?

Пример: я проверяю существование элемента массива следующим образом:

if (!self::$instances[$instanceKey]) { $instances[$instanceKey] = $theInstance; } 

Тем не менее, я продолжаю получать эту ошибку:

 Notice: Undefined index: test in /Applications/MAMP/htdocs/mysite/MyClass.php on line 16 

Конечно, в первый раз, когда я хочу экземпляр, $ экземпляры не будут знать ключ. Думаю, мой чек на доступный экземпляр неверен?

Solutions Collecting From Web of "Как проверить, существует ли элемент массива?"

Вы можете использовать либо конструктор языка isset , либо функцию array_key_exists .

isset должен быть немного быстрее (поскольку это не функция) , но вернет false, если элемент существует и имеет значение NULL .

Например, учитывая этот массив:

 $a = array( 123 => 'glop', 456 => null, ); 

И эти три теста, опираясь на isset :

 var_dump(isset($a[123])); var_dump(isset($a[456])); var_dump(isset($a[789])); 

Первый получит вас ( элемент существует и не равен null) :

 boolean true 

Пока второй получит вас (элемент существует, но имеет значение null) :

 boolean false 

И последний получит вас (элемент не существует) :

 boolean false 

С другой стороны, используя array_key_exists например:

 var_dump(array_key_exists(123, $a)); var_dump(array_key_exists(456, $a)); var_dump(array_key_exists(789, $a)); 

Вы получите эти результаты:

 boolean true boolean true boolean false 

Потому что в двух первых случаях элемент существует, даже если он имеет значение null во втором случае. И, конечно же, в третьем случае его не существует.

В таких ситуациях, как твой, я обычно использую isset , учитывая, что я никогда не во втором случае … Но выбор того, какой из них использовать сейчас, зависит от вас 😉

Например, ваш код может выглядеть примерно так:

 if (!isset(self::$instances[$instanceKey])) { $instances[$instanceKey] = $theInstance; } 

array_key_exists () является SLOW по сравнению с isset (). Сочетание этих двух (см. Ниже код) поможет.

Преимущество isset () достигается при сохранении правильного результата проверки (т. Е. Возвращает TRUE, даже если элемент массива равен NULL)

 if (isset($a['element']) || array_key_exists('element', $a)) { //the element exists in the array. write your code here. } 

Сравнение бенчмаркинга: (извлечено из нижеследующих сообщений в блоге).

 array_key_exists() only : 205 ms isset() only : 35ms isset() || array_key_exists() : 48ms 

См. http://thinkofdev.com/php-fast-way-to-determine-a-key-elements-existance-in-an-array/ и http://thinkofdev.com/php-isset-and-multi- массив- х мерный /

для подробного обсуждения.

Для этого вы можете использовать функцию array_key_exists .

Например,

 $a=array("a"=>"Dog","b"=>"Cat"); if (array_key_exists("a",$a)) { echo "Key exists!"; } else { echo "Key does not exist!"; } 

PS: Пример отсюда .

Вы можете использовать isset() для этого.

 $myArr = array("Name" => "Jonathan"); print (isset($myArr["Name"])) ? "Exists" : "Doesn't Exist" ; 

Согласно руководству php вы можете сделать это двумя способами. Это зависит от того, что вам нужно проверить.

Если вы хотите проверить, существует ли данный ключ или индекс в массиве, используйте array_key_exists

 <?php $search_array = array('first' => 1, 'second' => 4); if (array_key_exists('first', $search_array)) { echo "The 'first' element is in the array"; } ?> 

Если вы хотите проверить, существует ли значение в массиве, используйте in_array

  <?php $os = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $os)) { echo "Got Irix"; } ?> 

Вы хотите использовать функцию array_key_exists.

Небольшой анекдот, иллюстрирующий использование array_key_exists .

 // A programmer walked through the parking lot in search of his car // When he neared it, he reached for his pocket to grab his array of keys $keyChain = array( 'office-door' => unlockOffice(), 'home-key' => unlockSmallApartment(), 'wifes-mercedes' => unusedKeyAfterDivorce(), 'safety-deposit-box' => uselessKeyForEmptyBox(), 'rusto-old-car' => unlockOldBarrel(), ); // He tried and tried but couldn't find the right key for his car // And so he wondered if he had the right key with him. // To determine this he used array_key_exists if (array_key_exists('rusty-old-car', $keyChain)) { print('Its on the chain.'); } 

Вы также можете использовать array_keys для количества вхождений

 <?php $array=array('1','2','6','6','6','5'); $i=count(array_keys($array, 6)); if($i>0) echo "Element exists in Array"; ?>