isset vs array_key_exists (PHP)

Чтобы проверить существование элемента массива по ключу, существует два способа. Первый при помощи функции isset($var), второй при помощи функции array_key_exists($key, $array).

Описание isset и array_key_exists

По своей сути функции похожи, только isset($var) проверяет значение переменной $var отличное от null, а array_key_exists($key, $array) проверяет наличие ключа $key в массиве $array.

Обе функции возвращают true.

Сравнение скорости isset и array_key_exists

Для сравнения проведем несколько тестов над массивом в 10000 элементов. Проведем 9 тестов, 3 теста по 10000 итераций, 3 теста по 100000 итераций и еще 3 теста по 1000000 итераций. Во время каждой итерации будет поиск элемента массива по случайно полученному ключу. После сравним скорость выполнения.

<?php // исходный массив $array = range(1, 10000); $key_start = 5000; $key_finish = 15000; // список итераций $iterations_list = array( 10000, 100000, 1000000 ); echo '<pre>'; foreach ($iterations_list as $iterations) { for ($test = 1; $test <= 3; $test++) { echo $test . '. ' . $iterations . PHP_EOL; // start isset $start = microtime(true); for ($i = 0; $i < $iterations; $i++) { $key = rand($key_start, $key_finish); isset($array[$key]); } $isset_time = microtime(true) - $start; echo "isset time: {$isset_time} sec" . PHP_EOL; // start array key exists $start = microtime(true); for ($i = 0; $i < $iterations; $i++) { $key = rand($key_start, $key_finish); array_key_exists($key, $array); } $array_time = microtime(true) - $start; echo "array_key_exists time: {$array_time} sec" . PHP_EOL; if ($array_time > $isset_time) { $ratio = round($array_time / $isset_time, 2); echo "в {$ratio} isset быстрее array_key_exists" . PHP_EOL . PHP_EOL; } else { $ratio = round($isset_time / $array_time, 2); echo "в {$ratio} array_key_exists быстрее isset" . PHP_EOL . PHP_EOL; } } echo PHP_EOL . PHP_EOL; }

Результаты сравнения

В результате на экран были выведены следующие результаты:

1. 10000 isset time: 0.0065979957580566 sec array_key_exists time: 0.01118803024292 sec в 1.7 isset быстрее array_key_exists 2. 10000 isset time: 0.0050909519195557 sec array_key_exists time: 0.0091171264648438 sec в 1.79 isset быстрее array_key_exists 3. 10000 isset time: 0.0056431293487549 sec array_key_exists time: 0.0095889568328857 sec в 1.7 isset быстрее array_key_exists 1. 100000 isset time: 0.053568840026855 sec array_key_exists time: 0.08875584602356 sec в 1.66 isset быстрее array_key_exists 2. 100000 isset time: 0.048758029937744 sec array_key_exists time: 0.087341070175171 sec в 1.79 isset быстрее array_key_exists 3. 100000 isset time: 0.051501035690308 sec array_key_exists time: 0.087778091430664 sec в 1.7 isset быстрее array_key_exists 1. 1000000 isset time: 0.5282289981842 sec array_key_exists time: 0.88871002197266 sec в 1.68 isset быстрее array_key_exists 2. 1000000 isset time: 0.51157307624817 sec array_key_exists time: 0.88286900520325 sec в 1.73 isset быстрее array_key_exists 3. 1000000 isset time: 0.51563096046448 sec array_key_exists time: 0.92196488380432 sec в 1.79 isset быстрее array_key_exists

Вывод

Можно смело делать вывод, что функция isset() примерно в ~1.7 раз, работает быстрее функции array_key_exists(). Лучше использовать isset(), короче и быстрее.

Категории

ПрограммированиеPHPОптимизация

Читайте также

Комментарии