Как проверить, существует ли элемент массива? - программирование
Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

Вы можете использовать либо конструкцию языка 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;
}

Ответ 2

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-dimentional-array/

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

Ответ 3

Вы можете использовать функцию 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: Пример из здесь.

Ответ 4

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

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

Ответ 5

В соответствии с руководством 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";
}
?>

Ответ 6

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

Ответ 7

Небольшой анекдот, иллюстрирующий использование 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.');
}

Ответ 8

Вы также можете использовать 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";
?>