@Nikelamoc

Как наименее русурсоемко записать массив в файл?

День добрый.
Надо записать массив в файл с минимальными затратами по оперативке и цпу.
Сейчас это делается так
foreach($array as $key => $value) {
$price_array[$key] = $value[price];
}
$filename = dirname(__FILE__) . "/data/price.txt";
file_put_contents($file, '<?php $price_array = ' . var_export($price_array, true) . ';');


Я так понимаю, что надо делать как-то через fwrite, но как там строку запаковать ?
Я пытался через серилизацию, но выходит битый массив.

И самое главное, если там массив на 50к значений, вот такое построчное писание в файл скрипт не повесит ?
  • Вопрос задан
  • 373 просмотра
Решения вопроса 1
@unity_ultra_hardcore
Сильно зависит от структуры словаря. Если только строковые ключи-значения, то можно попробовать вот так его писать: https://gist.github.com/sc0rp10/0cef7c64aad392a2e799.
Дальше советую обложиться профайлерами и самостоятельно выяснить, что выгоднее: писать построчно из большого словаря в памяти, либо один раз его сдампить в файл целиком. Ну а там уже делать вывод, что конкретно в вашем случае больше подходит.
Лично мне кажется, что задумываться о скорости выполнения var_export + file_put_contents стоит, например, с объема данных в сотни мегабайт. В том смысле, что на более мелких объемах, эти вызовы займут крайне мало времени на фоне общего времени выполнения и смысла экономить буквально на спичках не будет.
Но, повторюсь, все надо профилировать, а не гадать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Apathetic
@Apathetic
Frontend
Ну, два способа (сериализация и var_export) вы уже испытали, попробуйте теперь json_encode. Этот способ работает примерно с той же производительностью, что и сериализация, и в разы быстрее, чем var_export. Учитывайте пару ограничений: json_decode будет работать с ошибками, если в массиве больше 127 уровней и будет проблема с восстановлением объекта как, собственно, объекта. Но, я так понимаю, в вашем случае это не проблемы. Зато есть дополнительный плюс - json_encode даёт на выходе строку меньшего размера, чем serialize.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 16:12
2000 руб./за проект
25 апр. 2024, в 16:08
130000 руб./за проект