Который быстрее, array_key_exists или array_search?
Возможный дубликат:
Что быстрее и лучше определить, существует ли ключ массива в PHP?
Предположим, я хочу сохранить список друзей, которые у меня есть на memcache.
иногда мне нужно искать, если пользователь включен в мой список, а иногда мне нужно получить список всех друзей.
Вы предпочли бы
$friends[] = $friend
или
$friends[$friend] = 1;
логическое обоснование состоит в том, чтобы сэкономить столько, сколько возможно, как возможно, без штрафа за скорость.
Я не нашел случая для php 5.3.8, который может помочь мне в моей маленькой дилемме:
под нагрузкой, которая быстрее выполняется?
array_key_exists или in_array? (т.е. является foo другом бара?)
Кроме того, иногда мне нужно получить весь список друзей, поэтому мне нужно перебрать весь список, чтобы создать массив друзей. не совсем уверен в отношении второго метода, так как я еще не знаю, будет ли больше array_search | array_key_exists | in_array или выбор полного списка друзей.
любая идея?
Ответы
Ответ 1
array_key_exists
выполняется намного быстрее. array_search
должен пересекать весь массив, так что это O (n). array_key_exists
- это поиск в хэш-таблице, поэтому это O (1).
См. http://en.wikipedia.org/wiki/Big_O_notation, если вы новичок в этой концепции.
Между array_key_exists
и isset
, хотя обе очень быстрые [O (1)], isset
значительно быстрее. Если эта проверка происходит много тысяч раз, вы должны использовать isset.
Следует отметить, что они не идентичны, хотя - когда ключ массива существует, но значение null
, isset
вернет false и array_key_exists
вернет true. Если значение может быть null
, вам нужно использовать array_key_exists
.
Ответ 2
Вы можете запустить простой тест самостоятельно. В любом случае, если $friends
должен содержать уникальные элементы (нет повторяющихся значений!!), вы можете использовать ключи для их хранения.
Я думаю, что быстрее PHP проверяет ключи (array_key_exists()
или просто isset($array[$key])
). Чтобы найти значение, PHP должен циклически перемещаться по массиву; для поиска ключа PHP будет использовать хеш-функцию.
Вы можете прочитать больше fooobar.com/info/220942/....