Пример: я проверяю существование элемента массива следующим образом:
if (!self::$instances[$instanceKey]) { $instances[$instanceKey] = $theInstance; }
Тем не менее, я продолжаю получать эту ошибку:
Notice: Undefined index: test in /Applications/MAMP/htdocs/mysite/MyClass.php on line 16
Конечно, в первый раз, когда я хочу экземпляр, $ экземпляры не будут знать ключ. Думаю, мой чек на доступный экземпляр неверен?
Вы можете использовать либо конструктор языка 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"; ?>