> сколько памяти отнимает двухмерный массив?
До фига... И даже больше... Причину уже объясняли, языки вроде Перла и ПХП для каждой переменной хранят слишком много дополнительной инфы. Особенно это становится заметно когда есть очень много очень маленьких данных (300 тысяч записей, размер файла - 8 мегов). Проще всего купить побольше памяти, дешевле будет.
Если все таки очень надо делать на ПХП и при этом имея ограниченный объем памяти, придется сильно попотеть. Мне приходилось реализовывать свой хэш на Перле, потому что встроенный съедал всю память. А так я брал две строковые переменые по несколько мегабайт, заполнял их нулями, и строил там хэш-таблицу: в одной переменной собственно таблица со смещениями для второй строки, где лежали данные. Вся работа ведется с помощью substr, pack и unpack. Расход памяти минимальный. Аналогичным образом делал дерево. 100000 элементов запросто влезали в 4-5 мегабайт. Не совсем понятно, что делает этот страшный четырехмерный массив, но наверное его можно представить в виде дерева.
Или еще одна идея: не уверен, но возможно одномерный массив будет меньше по размерам, чем 4-хмерный с аналогичными данными. Так вот, что если вместо "[$point][$level][$page][0]" формировать уникальную строку и использовать ее в качестве индекса.