Я реально не могу понять, хоть и прочитал статьи на вики, в гугле и ещё тут.
Вот, допустим, есть массив:
$arr = [
'a' => 111,
'b' => 222,
'c' => 444,
5 => 555,
]
Как достигается O(1) при обращении к $arr['c']? Я правильно понимаю, что при компиляции php-скрипта, интерпретатор создает flat-массив из count($arr) указателей. Далее, выполняется некая хеш-функция к каждому ключу возвращающая индекс (
кстати, что это за хеш-функция такая? Ведь обычно же функции вроде md5, sha возвращают длинную строку). Потом по этому индексу мы храним указатель на value (предварительно выделив память под это)?
А сами ключи где хранятся (если надо получить array_keys, например)? Для плоских массивов $arr = [1, 2, 3, 4] тоже также всё работает?