Извлечь данные из json и обработать

430
12 февраля 2017, 13:32

Пытаюсь собрать массив данных по трем критериям "city","country", "region". Принцип работы таков: считать IP пользователя и подставить его в json, после спарсить 2 значения ("city","country" (регион недоступен)) Но мой код ругается на array_merge. Подскажите, как мне это сделать?

public static function GEO()
{
    $ip = Route::clientIp();
    $json = file_get_contents('http://geoip.nekudo.com/api/'.$ip);
    var_dump($json);
    $data = json_decode($json, true);
    $loc = [
        'city' => null, 
        'country' => null,
        'region' => null
    ];
    $location = array_merge($loc, $data);
    return $location;
}
Answer 1

Попробуйте так:

public static function GEO()
{
    $ip = Route::clientIp();
    $json = file_get_contents('http://geoip.nekudo.com/api/'.$ip);
    var_dump($json);
    $data = json_decode($json, true);
    $location = [
        'city' => null, 
        'country' => null,
        'region' => null
    ];
    $location['city'] = $data['city']
    $location['country'] = $data['country']['name']
    return $location;
}

Или еще проще:

public static function GEO()
{
    $ip = Route::clientIp();
    $json = file_get_contents('http://geoip.nekudo.com/api/'.$ip);
    var_dump($json);
    $data = json_decode($json, true);
    return  [
        'city' => $data['city'], 
        'country' => $data['country']['name'],
        'region' => null
    ];

}

Дело в том, что $data['country'] содержит не значение, а еще один массив:

"name"=>"Russia",
"code"=>"RU"

Поэтому, чтобы добраться до name, нужно взять элемент массива внутри массива:

$data['country']['name']
READ ALSO
Яндекс.Диск, загрузка файлов

Яндекс.Диск, загрузка файлов

ПриветствуюДля загрузки файлов на яндекс

445
Простой файловый менеждер

Простой файловый менеждер

Почему в ссылку не вставляется путь для папки, и как выводить изображение папки, только для папки?

246
Как изменить аргумент функции, так чтобы он был виден во внешней области видимости?

Как изменить аргумент функции, так чтобы он был виден во внешней области видимости?

Функция partitionOn принимает 2 аргумента, pred — это функция задающая условия выборки элементов из массива items

299