Какова производительность php при прямом доступе к строке массива с указанным ключом

#php #arrays #performance #key

#php #массивы #Производительность #Клавиша

Вопрос:

У меня есть вопрос относительно производительности массива…. как php обрабатывает ключи массива? Я имею в виду, если я сделаю что-то вроде $my_city = $cities[15]; …. получает ли php прямой доступ к точному элементу строки в $cities массиве или php выполняет итерацию по массиву, пока не найдет соответствующую строку?

и если он обращается к строке напрямую … есть ли разница в производительности между массивом из 100 строк и массивом из 100 000 строк?

как в этом примере $my_city = $cities[15];

Комментарии:

1. это может вам немного помочь: blog.red-stars.net/uncategorized/php-array-performance

Ответ №1:

Массивы PHP реализованы в виде хэш-таблиц, поэтому доступ к элементам осуществляется как можно более напрямую, без повторения всего. Подробнее об алгоритме читайте здесь: http://en.wikipedia.org/wiki/Hash_table

Комментарии:

1. Я думаю, что хэш-таблица более уместна в случае с ассоциативным массивом (со значениями пары ключей).

2. @Artem Поскольку в PHP существует только один тип массива, я подозреваю, что реальной разницы нет (хотя я не уверен в этом на 100%). Массивы с числовой индексацией — это просто ассоциативные массивы с числовыми ключами.

Ответ №2:

Он обращается к ней напрямую. За сценой все сводится к арифметике указателей на память. Я с трудом могу поверить, что концепция или реализация массива в PHP каким-то образом отличается от других языков, таких как C, Java или C #.

Ответ №3:

Это также зависит от того, что находится внутри массива.

 // $my_city is a reference to the variable
$cities[15] = new stdobj();    
$my_city = $cities[15];

// $my_city is a copy of the array row
$cities[15] = 'foobar';    
$my_city = $cities[15];
  

Возможно, это не прямой ответ на ваш вопрос, но ссылка на объект обычно использует меньше памяти, чем переменная copy.

Ответ №4:

всегда существует очевидная разница в производительности между массивом из 100 строк и массивом из 100 000 строк

Комментарии:

1. В правильно реализованном алгоритме хэширования это должно практически не иметь значения.

2. по крайней мере, потребуется больше времени для инициализации и потребления большего объема памяти. и такая навигация по хэшу тоже будет вам кое-чего стоить.

3. Время чистого доступа на самом деле не будет зависеть от размера массива. Инициализация или потребление памяти самим массивом не имеют значения.