Является ли (isset (..) || array_key_exists (...)) более быстрым способом обнаружения нулевых значений, чем просто array_key_exists (...))? - PullRequest
1 голос
/ 14 марта 2012

При изучении того, как обнаружить нулевые значения в массиве , я наткнулся на комментарий какого-то пользователя в справочной странице http://www.php.net/manual/en/function.array-key-exists.php.

В нем говорилось, что

if (isset(..) || array_key_exists(...))
{
...
}

быстрее, чем делать

if array_key_exists(...))
{
...
}

Оценки, выставленные для 100000 пробежек, были

array_key_exists() : 205 ms
is_set() : 35ms
isset() || array_key_exists() : 48ms

Мой вопрос:

(isset(..) || array_key_exists(...)) быстрее array_key_exists()?Если так, то почему?

РЕДАКТИРОВАТЬ: При написании этого вопроса, я думаю, я нашел свой ответ.В любом случае я решил опубликовать вопрос, чтобы проверить, правильно ли я думаю.

Ответы [ 3 ]

5 голосов
/ 16 марта 2012

Скорость зависит от того, какой массив вы проверяете. Если массив содержит значение , отличное от null, "" или 0

if (isset(..) || array_key_exists(...)){    
}

приведенный выше код будет быстрее, поскольку isset будет проверен, а затем выполненный код. Array_key_exists не будет запущен.

Если массив содержит значение null, "" или 0, тогда будет проверено isset, а затем array_key_exists. Это займет больше времени, чем простое тестирование для array_key_exists.

Так что вопрос, который быстрее, во многом зависит от проверяемого массива.

Многие люди говорили, что это не имеет значения. Они не объяснили, почему это не имеет значения. Я предполагаю, что они означают, что улучшения скорости настолько минимальны, что не стоит беспокоиться об этом. Они также могут означать, что то, что быстрее, зависит от значений, присвоенных в вашем массиве (и, следовательно, каждый раз различается.)

В конечном счете, если вы знаете, что большинству клавиш будут присвоены значения, отличные от нуля, "" или 0, и вам действительно необходимо определить, когда назначены нулевые значения, используйте

if (isset(..) || array_key_exists(...)){    
}
0 голосов
/ 14 марта 2012

Самый надежный метод будет isset() || array_ky_exists(), так как он проверяет больше всего, и оценка короткого замыкания ускорит процесс.

Однако, как сказал pst в комментариях: It just doesn't matter. На самом деле, в конце концов, это почти не имеет значения.

В принципе, нет, это не так. В конце концов, базовая математика скажет вам, что две проверки не быстрее, чем одна проверка.

0 голосов
/ 14 марта 2012

Извините, но чтобы обнаружить нулевые значения в массиве, вы можете сначала ПРОВЕРИТЬ массив, используя in_array, который сообщит вам, содержит ли массив «ноль». Я не совсем уверен, чего вы на самом деле хотите достичь, хотите ли вы найти нулевое значение или как? Будет редактировать, когда вы сообщите нам больше.

...