Который быстрее, 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/....