Сравнение скорости работы isset, empty, array_key_exists в PHP
При написании скриптов на 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.
Все комментарии