Почему array_key_exists 
значительно медленнее, чем isset? Ведь первая просто проверяет наличие ключа в массиве, а вторая должна: проверить существование переменной, проверить возможность наличия ключа, проверить наличие ключа, проверить его на null.
<?php 
$a = array('a'=>1,'b'=>2,'c'=>3,'d'=>4, 'e'=>null); 
$s = microtime(true); 
for($i=0; $i<=100000; $i++) { 
     $t= array_key_exists('a', $a); //true 
     $t= array_key_exists('f', $a); //false
     $t= array_key_exists('e', $a); //true 
} 
$e = microtime(true); 
echo 'array_key_exists : ', ($e-$s);
echo "\r\n";
$s = microtime(true); 
for($i=0; $i<=100000; $i++) { 
     $t = isset($a['a']); //true 
     $t = isset($a['f']); //false
     $t = isset($a['e']); //false 
} 
$e = microtime(true); 
echo 'is_set : ' , ($e-$s);
Тестировал в песочнице - 
sandbox.onlinephpfunctions.com/code/20269eaf965113... - итого:
array_key_exists : 
0.013365030288696is_set : 
0.0059390068054199