Помогите школяру. PHP JSON
1351 сообщение
#14 лет назад
Не спрашивайте меня, зачем мне это надо (пытаюсь понять как работает php). Если есть свободная минутка (пару секунд?), помогите просветиться.
есть такая штука
// Сохраняем массив в дб
$string_1 = $_POST;
$ray = $string_1;
$string = json_encode($ray);
file_put_contents('db.php',$string,FILE_APPEND);
которая создает в файле БД новые массивы, и вписывает результат в них.
Как заставить это, дописывать не в новые массивы, а в уже существующий?
Чувствую вопрос смешной и простой, но я не могу понять механику работы с JSON.
Подскажите пожалуйста :-)
1267 сообщений
#14 лет назад
Если вы хотите, чтобы данные добавлялись к текущему (те. выполнялось слияние массивов), то перед записью считайте данные с файла:
$ray = json_decode(file_get_contents('db.json'));
Оффтопик
И не производите запись в файлы с расширением PHP.
Если вы хотите чтобы каждый записаный массив выступал отдельным элементом, то при просто используйте другой шаблон для хранения массива.
$arr = array();
$arr = array("name" => "...", ... );
$arr = array("name" => "...", ... );
1351 сообщение
#14 лет назад
Zionit, Спасибо за дельные советы, я думал о том, что можно вызвать весь массив, дополнить, и потом закинуть обратно,
но представилось мне, не будет ли это сильно перегружать машину, если массив разрастется?
Или можно без опаски пользоваться таким методом (достал, изменил, записал)?
Думал есть более изящное решение, которое позволяет дописывать хм 0_о
1351 сообщение
#14 лет назад
В любом случае, огромное спасибо. Я бы ещё поломал голову как правильно массив достать 
1267 сообщений
#14 лет назад
Более изящного нет, есть более читерское. Обрезать результат json_encode по краям и записывать все полученные строки через запятую в файл, а при десериализации использовать json_decode("");
В разумных пределах работать с файлами вы так можете спокойно, всё-равно любая операция по дописыванию сначала считывает содержимое, а потом записывает всё заново. Ускорение будет только за счёт того, что это делает программа на C.
1594 сообщения
#14 лет назад
Просто лучше вообще не использовать файлы для работы с большими объёмами данных.
1599 сообщений
#14 лет назад
Цитата ("TomNorman"):Или можно без опаски пользоваться таким методом (достал, изменил, записал)?
Если это просто тестовая задача и вы единственный пользователь скрипта - то можно без опаски. А если это было бы реально работающее приложение для пользователей - тогда советую почитать об опасностях хранения данных в двумерных файлах, а не в базе данных. Недостатков до фига, начиная от трудностей поиска конкретных элементов и вставки данных в середину, и до возникновения конкуренции на запись между несколькими пользователями (что будет, если одновременно три пользователя попытаются залочить файл?) + затраты на очередь ожидания разблокировки файла с данными (что приведет к тому, что несколько пользователей будут ждать, пока один другой запишет данные). Ну и когда файл разрастется - работа с ним будет все медленнее и медленнее.
1267 сообщений
#14 лет назад
Crist, мне кажется человек просто учится, к базам ему ещё рановато лезть когда он с файлами не разобрался.
1599 сообщений
#14 лет назад
Zionit, вам часто бывают нужны знания о том, как доставать, записывать и т.д. инфу в файлы?) Я уже не помню, когда что-то реально работающее делал на файлах. Часто бывает нужно просто записать инфу в файл, потом когда-нибудь ее вынуть, перезаписать - но вот хранить массивы - никогда за последние много лет 
1267 сообщений
#14 лет назад
Crist, нет, но когда я начинал учиться, то начинал с файлов. Это более правильно и так учат везде.