I've seen a lot of people do the former, is there any performance benefit doing one vs the other? Or is it just an eye candy? I personally use the latter every time as it is shorter and personally more readable to me.
Difference between isset() and array_key_exists() Function: The main difference between isset() and array_key_exists() function is that the array_key_exists() function will definitely tells if a key exists in an array, whereas isset() will only return true if the key/variable exists and is not null.
The array_key_exists() function checks an array for a specified key, and returns true if the key exists and false if the key does not exist.
Using sizeof() function: This method check the size of array. If the size of array is zero then array is empty otherwise array is not empty.
If you want to know whether the array is defined at all, use isset($array) . If you want to know whether a particular key is defined, use isset($array[$key]) .
The other responses focus on the differences between the two functions. This is true, but if the source array does not contain null
or 0
or ""
, ... (empty values) values you can benchmark the speed of the two functions:
<?php
function makeRandomArray( $length ) {
$array = array();
for ($i = 0; $i < $length; $i++) {
$array[$i] = rand(1, $length);
}
return $array;
}
function benchmark( $count, $function ) {
$start = microtime(true);
for ($i = 0; $i < $count; $i++) {
$function();
}
return microtime(true) - $start;
}
$runs = 100000;
$smallLength = 10;
$small = makeRandomArray($smallLength);
var_dump(benchmark($runs, function() {
global $small, $smallLength;
array_key_exists(rand(0, $smallLength), $small);
}));
var_dump(benchmark($runs, function() {
global $small, $smallLength;
!empty($small[rand(0, $smallLength)]);
}));
Which gave me the following results:
For a small array:
array_key_exists
: float(0.18357992172241)empty
: float(0.072798013687134)isset
: float(0.070242881774902)For a relative big array:
array_key_exists
: float(0.57489585876465)empty
: float(0.0068421363830566)isset
: float(0.0069410800933838)So if it's possible it's faster to use empty
or isset
.
array_key_exists($key, $array)
and !empty($array[$key])
can produce different results therefore it is not a matter of performance or preference.
| array_key_exists($key, $array) | !empty($array[$key]) |
+-----------------------------+--------------------------------|----------------------+
| $array[$key] does not exist | false | false |
| $array[$key] is truthy | true | true |
| $array[$key] is falsey | true | false |
You can see that the truth table is different for falsey values (false, 0, NULL, etc). Therefore !empty($array[$key])
is not suitable in situations where a falsey value could be considered present e.g. $array["number_of_children"]
should not be tested for emptiness where the value 0 makes sense.
You can use isset($array[$key])
which produces results identical to array_key_exists($key, $array)
with exactly one exception:
| array_key_exists($key, $array) | isset($array[$key]) |
+-------------------------------------+--------------------------------|---------------------+
| $array[$key] does not exist | false | false |
| $array[$key] is truthy | true | true |
| $array[$key] is falsey but not NULL | true | true |
| $array[$key] is NULL | true | false |
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With