2016-01-20 1 views
0

Мне очень нужна помощь. Я использую API для сбора информации о художнике в зависимости от имени исполнителя ($artist_name = $_GET['artistname']).Хранение информации о нескольких художниках от API в файл (PHP)

Мне нужно добавить результаты API в массив и сохранить его в файл (НЕ база данных). Этот файл будет постоянно расти, поскольку к нему добавляются все больше записей артиста.

Как только у меня есть массив в файле, мне нужно его прочитать и проанализировать. Таким образом, я могу отображать информацию без повторного использования API.

Я выяснил, как добавить массив в файл с одной записью, но как добавить больше ключей в один массив?

Это то, что я использую сейчас ...

//ARRAY 
$artist_info_location_array = array($artist_name => $location_entry); 

//FILE 
$artist_location_file = get_template_directory()."/Database/Artists/info-location.json"; 

//GET ARRAY FILE 
$get_location_array[] = json_decode(file_get_contents($artist_location_file), true); 

if (is_array($get_location_array)) { 
    if (!array_key_exists($artist_name, $get_location_array)) { 
     file_put_contents($artist_location_file, json_encode($artist_info_location_array)); 
    } 
} 

Он печатает это файл:

{"Imagine Dragons":"Las Vegas, NV, US"} 

Это круто, но мне нужно, чтобы иметь возможность добавлять больше художников это ТАКОЕ МАССА. Таким образом, результат должен выглядеть следующим образом:

{"Imagine Dragons":"Las Vegas, NV, US", "Adele":"London, UK"} 

Это показывает, что Драгоценности Драконов и Адель оба добавлены в тот же массив.

Может ли кто-нибудь помочь мне «добавить» или добавить дополнительные ключи и значения в тот же массив, что и в файл?

Спасибо.


EDIT 1 (В ответ на Мартин): У меня есть панель на стороне данной страницы. На этой панели будет отображаться соответствующая информация о художнике, который был искален. Предположим, вы ищете художника «Адель». $ artist_name есть = Adele.

Скажем, я хотел бы сохранить все места исполнителя, я бы использовал пример, который я разместил, чтобы хранить каждое местоположение исполнителя в файле с именем info-location.json ($ artist_location_file).

Таким образом, каждый раз, когда загружается страница исполнителя, имя и местоположение исполнителя добавляются в массив в файле.

Если мой пример не имеет никакого смысла, пожалуйста, покажите мне пример того, как добавить несколько записей в ОДИН МАССИВ. Я использую API и хотел бы кэшировать эту информацию для использования вместо запроса API при каждой загрузке.

Надеюсь, что это имеет смысл. :)

+0

[Руководство] (http://php.net /manual/en/function.file-put-contents.php) Параметр 3 установлен в 'FILE_APPEND'. Вся идея кажется очень ханкой. – RiggsFolly

+0

Я сделал это, и флаг FILE_APPEND фактически добавляет еще один« массив »в конец файл. Например: {«Imagine Dragons»: «Las Vegas, NV, US»} {«Адель»: «Лондон, Великобритания»}. Мне нужны другие художники, добавленные в фактический массив. Что означает хинки? Если есть лучший способ, пожалуйста, поделитесь со мной :) – anthonyCam

+0

Что определяет, что такое массив, как бы вы установили, какие художники принадлежат к массивам, и что еще более важно, как ваш файл установит это? Если у вас есть только один массив мест/художников, вы можете просто добавить новые и предположить, что они все в одном массиве? – Martin

ответ

2

Возможно, я неправильно понимаю ваш вопрос, но если вы просто хотите прочитать в json-файле, добавьте в него ассоциативный массив, если он не существует, а затем верните его в json-файл, почему бы вам не сделать что-то вроде этого:

if (is_array($get_location_array)) { 
if (!array_key_exists($artist_name, $get_location_array)) { 
    $get_location_array[$artist_name] = $location; 
    file_put_contents($artist_location_file, json_encode($artist_info_location_array)); 
    } 
} 

file_put_contents будет перезаписывать существующий файл (довольно точно). Но ваш лучший вариант - использовать базу данных.Если вы не можете сделать это, то я предлагаю, чтобы предотвратить запись в файл, в то время как вы делаете это, я предлагаю вам использовать fopen, flock и fwrite, а затем fclose

+0

Спасибо за пример. Да, file_put_contents() перезаписывает файл, если вы не используете флаг FILE_APPEND. Я пробовал добавлять, и он просто не работает для того, что я пытаюсь сделать. Я проверю fopen, flock и т. Д. Спасибо! – anthonyCam

+0

Я предлагаю просто перезаписать его. У вас уже есть файл в массиве: '$ get_location_array = json_decode (file_get_contents ($ artist_location_file), true);' просто добавить в массив '$ get_location_array [$ key] = $ value' encode is и переписать файл – dishrex

+0

Dish_Rex, ваше простое решение работает. Спасибо! Это будет работать до тех пор, пока я не смогу работать с базами данных. – anthonyCam

Смежные вопросы