Вы можете авторизоваться через ВКонтакте, Фейсбук и оставить комментарий


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 итераций. Во время каждой итерации будет поиск элемента массива по случайно полученному ключу. После сравним скорость выполнения.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php

// исходный массив
$array range(110000);
$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_time2);
            echo 
"в {$ratio} isset быстрее array_key_exists" PHP_EOL PHP_EOL;
        } else {
            
$ratio round($isset_time $array_time2);
            echo 
"в {$ratio} array_key_exists быстрее isset" PHP_EOL PHP_EOL;
        }

    }

    echo 
PHP_EOL PHP_EOL;
}

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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(), короче и быстрее.

Опубликовано: 06 ноября 2013  ·  Автор: Артём Фёдоров  ·  2907 просмотров

Полезные статьи по теме

Категория

ГлавнаяПрограммированиеPHPОптимизацияisset vs array_key_exists (PHP)

Чтобы оставить комментарий нужно авторизоваться на сайте
или войти через ВКонтакте или Фейсбук

Войти через ФейсбукВойти через Твиттер

Комментарии

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

© 2010-2017 expange.ru
При полном или частичном копировании статей сайта, ссылка на источник обязательна.

Хотите узнать больше информации, пишите на: artem@expange.ru

Полезное онлайн  ·  Новости  ·  Изображения  ·  Статьи по датам

О проекте  ·  Правила пользования  ·  Представительства

Благодарности и пожелания