Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if an array has an element at the specified index?

Tags:

php

I know there is array_key_exists() but after reading the documentation I'm not really sure if it fits for this case:

I have an $array and an $index. Now I want to access the $array, but don't know if it has an index matching $index. I'm not talking about an associative array, but an plain boring normal numerically indexed array.

Is there an safe way to figure out if I would really access an $array element with the given $index (which is an integer!)?

PHP may not care if I access an array with an index out of bounds and maybe just returns NULL or so, but I don't want to even attempt to code dirty, so I want to check if the array has the key, or not ;-)

like image 856
openfrog Avatar asked Jan 08 '10 18:01

openfrog


2 Answers

You can use either the language construct isset, or the function array_key_exists : numeric or string key doesn't matter : it's still an associative array, for PHP.

isset should be a bit faster (as it's not a function), but will return false if the element exists and has the value NULL.


For example, considering this array :

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

And those three tests, relying on isset :

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

You'll get this kind of output :

boolean true
boolean false
boolean false

Because :

  • in the first case, the element exists, and is not null
  • in the second, the element exists, but is null
  • and, in the third, the element doesn't exist


On the other hand, using array_key_exists like in this portion of code :

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

You'll get this output :

boolean true
boolean true
boolean false

Because :

  • in the two first cases, the element exists -- even if it's null in the second case
  • and, in the third, it doesn't exist.
like image 196
Pascal MARTIN Avatar answered Oct 11 '22 14:10

Pascal MARTIN


You can easily use isset():

if (isset($array[$index])) {
   // array index $index exists
}

And as you have suggested, PHP is not very kind if you try to access a non-existent index, so it is crucial that you check that you are within bounds when dealing with accessing specific array indexes.

If you decide to use array_key_exists(), please note that there is a subtle difference:

isset() does not return TRUE for array keys that correspond to a NULL value, while array_key_exists() does.

like image 35
Corey Ballou Avatar answered Oct 11 '22 14:10

Corey Ballou