@lasthero67

Как сделать подстановку в json файл?

Имеется csv-файл такого типа
en_name;ru_name
т.е. английскому названию поставлено в соответствие русское, разделителем при этом является точка с запятой.

И есть файл json, в котором присутствуют английские названия.

$data = json_decode(file_get_contents($filename_en), true);
foreach($data['response'][0]['cities'][0] as $city){
	
}


Английское название в этом случае хранится в $city['id']['name']. Каким образом в цикле сделать автозамену английских названий на русские из csv-файла?
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
@alexalexes
Вычитать файл csv в ассоциативный массив вида:
$city_dictionary[$en_name] = $ru_name;
И произвести замену:
//$data['response'][0]['cities'][0] - вы уверены, что по конечному нулевому индексу находится весь список, а не один город?
foreach($data['response'][0]['cities'][0] as $city_key => $city)
{
  if(array_key_exists($city, $city_dictionary))
   $data['response'][0]['cities'][0][$city_key] = $city_dictionary[$city];
}

После этого $data можно конвертнуть обратно в json и в нем будет заменено то, что было в словаре $city_dictionary.
PS: Метод имеет ограничение. В текущем формате ассоциативного массива $city_dictionary нельзя разместить два равноправных варианта перевода. В случае наличия альтернативного варианта русского перевода, из csv будет извлечен в массив последний вариант.
PS2: Ассоциативный массив словаря ограничен объемом выделенной оперативной памяти скрипта.
Для более объемного словаря целесообразно делать выгрузку в базу данных и от туда использовать словарь, либо в memcache - архитектура технологии идеально подходит под условия вашей задачи. Но использовать и ту и другую нужно имея небольшой опыт.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы