Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: isset vs array_key_exists
Форумы портала PHP.SU » » Хранение данных, их вывод и обработка » isset vs array_key_exists

Страниц (1): [1]
 

1. eai - 25 Апреля, 2012 - 16:01:52 - перейти к сообщению
Весь инет пестрит сообщениями что isset быстрее чем array_key_exists

Решил проверить на PHP 5.4

PHP:
скопировать код в буфер обмена
  1. $a = array();
  2.  
  3. for ($i=0;$i<10000000;$i++);
  4.         $a[$i] = $i;
  5.  
  6. $t1 = microtime(true);
  7.  
  8. for ($i=0;$i<10000000;$i++);
  9.         $x = isset($a[$i]);
  10.  
  11. $t2 = microtime(true);
  12.  
  13. for ($i=0;$i<10000000;$i++);
  14.         $x = array_key_exists($i,$a);
  15.  
  16. $t3 = microtime(true);
  17.  
  18. print ($t2-$t1) . " isset  <br>";
  19. print ($t3-$t2) . " array_key_exists <br>";
  20.  


И вот такой вот результат
Цитата:
1.0322141647339 isset
1.0589790344238 array_key_exists

Разница 2%, учитывая что isset не ищет элементы с пустыми значениями, array_key_exists получается предпочтительнее
(Добавление)
А вот так вот
PHP:
скопировать код в буфер обмена
  1. $a = array();
  2.  
  3. for ($i=0;$i<10000000;$i++);
  4.         $a["r$i"] = "v$i";
  5.  
  6. $t1 = microtime(true);
  7.  
  8. for ($i=0;$i<10000000;$i++);
  9.         $x = isset($a["k$i"]);
  10.  
  11. $t2 = microtime(true);
  12.  
  13. for ($i=0;$i<10000000;$i++);
  14.         $x = array_key_exists("k$i",$a);
  15.  
  16. $t3 = microtime(true);
  17.  
  18. print ($t2-$t1) . " isset  <br>";
  19. print ($t3-$t2) . " array_key_exists <br>";


результат практический равный (то то то это в лидеры выходит в зависимости от случайности

Цитата:
1.0056128501892 isset
1.0017261505127 array_key_exists
2. Bio man - 25 Апреля, 2012 - 16:11:27 - перейти к сообщению
И? Не понял
3. eai - 25 Апреля, 2012 - 16:11:30 - перейти к сообщению
Ах я старый, лишнюю точку с запятой поставил Улыбка
(Добавление)
Инет прав isset более чем вдвое быстрее на моем примере даже с новым PHP 5.4

Цитата:
3.0475640296936 isset
7.7045259475708 array_key_exists


с количеством элементов 100000

 

Powered by ExBB FM 1.0 RC1