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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: isset vs array_key_exists

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
eai
Отправлено: 25 Апреля, 2012 - 16:01:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Весь инет пестрит сообщениями что 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
 
 Top
Bio man
Отправлено: 25 Апреля, 2012 - 16:11:27
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




И? Не понял
 
 Top
eai
Отправлено: 25 Апреля, 2012 - 16:11:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 521
Дата рег-ции: Сент. 2009  
Откуда: Петроград


Помог: 10 раз(а)




Ах я старый, лишнюю точку с запятой поставил Улыбка
(Добавление)
Инет прав isset более чем вдвое быстрее на моем примере даже с новым PHP 5.4

Цитата:
3.0475640296936 isset
7.7045259475708 array_key_exists


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

(Отредактировано автором: 25 Апреля, 2012 - 16:15:43)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB