Сравнение скорости работы isset, empty, array_key_exists в PHP

PHP
/
2013-09-05 20:22
Просмотры: 5390

При написании скриптов на PHP часто возникают ситуаци , в которых нужна банальная проверка существования ключа массива. Допустим, что есть исходный массыв данных $array с не пустыми и не нулевыми значениями и ключами. Данные которые вносятся в массив "валидны для нас". Для задачи проверки определенного ключа в массиве подойдут две функции: isset, array_key_exists и языковая конструкция empty, точнее !empty. Постает вопрос: какую функцию или конструкцию использовать? Исходя из того, что основным критерием есть скорось выполнения скрипта, проведем тесты скорости работы этих функций и конструкции.

Пусть $array - исходный массив с 1000 элементов. Ключами будут хэши(md5) от цифр в диапазоне 0...999, значениями сами цифры.

То есть так:

$array = array(md5(0)=>0, md5(1)=>1,... md5(999)=>999);

Скрипт для теста:

<?php 
$start = microtime(true); 
for( $i=0; $i<10000000; $i++ ){
    <Тестируемая функция>($array[$key]); 
} 
$time = microtime(true) - $start; 
echo $time; 
?>

В скрипте, при разном значении ключа(переменная $key) проверяем его существование в массиве.

Тест выполняем 1000 раз, для каждого ключа массива. То есть $key = md5(0), $key = md5(1), ... $key = md5(999).

<Тестируемая функция>: isset, empty, !empty, array_key_exist.

Для каждого ключа делам тест 10.000.000

Результаты сохраняем и строим 4 графика $time($i): зависимость времени выполнения на тест от номера иттерации.

График тестирования:

Ось X - иттерациия, Y - время выполнения скрипта в секундах.

Средние значения времени выполнения:

isset: 1.51625519204 сек

empty: 1.5584102993 сек

!empty: 1.65596095967 сек

array_key_exists: 2.50256654239 сек

Самый медленный результат это использование функция array_key_exists. isset, empty, !empty - по скорости работы приблизительно на одном уровне.

В среднем при 10.000.000 проверок наличия элемента в массиве, выиграш использования isset или empty или !empty составляет прибизительно 1 секунду в отличии от array_key_exists.

Добавить комментарий

Все комментарии

radiopodarok.ru
04 декабря 2014 13:16
Потрясающе! Хочется перечитывать снова и снова… Такие авторы сегодня большая редкость.Пока прочитал только эту одну запись, если и все остальное точно также хорошо, то автору респект
Ответить
двойное гражданство
06 декабря 2014 08:51
Админ, а можно я размещу этот пост на своём сайте?
Ответить
iron-viper
21 марта 2018 14:48
Интересно, что еще по памяти получается.
Ответить
comments powered by Disqus