PHP if else оператор проверяет, является ли поле api php пустым

Я пытаюсь получить city атрибут из ip геолокации api.
Пример того, что возвращается из API:

{"as":"AS38484 Virgin Broadband VISP","city":"Adelaide","country":"Australia","countryCode":"AU","isp":"iseek Communications","lat":-27,"lon":133,"org":"iseek Communications","query":"1.178.0.144","region":"","regionName":"","status":"success","timezone":"","zip":""}

Мой код:

$query = '{"as":"AS38484 Virgin Broadband VISP","city":"Adelaide","country":"Australia","countryCode":"AU","isp":"iseek Communications","lat":-27,"lon":133,"org":"iseek Communications","query":"1.178.0.144","region":"","regionName":"","status":"success","timezone":"","zip":""}';
$query = @unserialize($query);
if($query && $query['status'] == 'success') {
if(!empty($query['city'])) {
$city =  $query['city'];
// routine that uses $city gets called
} else {
$lat = $query['lat'];
$lon = $query['lon'];
// routine that uses $lat, $lon gets called
}
}

В основном, if(!empty($query['city'])) ведет себя не так, как ожидалось (не то, чтобы я действительно знал, что я использовал PHP на прошлой неделе). Я также попытался установить $city перед оператором if, а затем тестирование if($city != ''),

Вопрос: Никакая комбинация условий не находит, а затем устанавливает для атрибута города значение city? И когда нет атрибута города, он также пропускает остальную часть и не устанавливает lat/lon,

Примечание: причина различия между city а также lat/lon погода API, который я запрашиваю предпочитает city но не каждый ip может его предоставить.

Спасибо

0

Решение

Два вопроса:

1)
Вы должны использовать json_decode десериализовать данные JSON

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

 $query->city;

не

 $query['city'];
1

Другие решения

$ query не является сериализованным массивом PHP, вы бы увидели его, если бы не использовали ‘@’ раньше unserialize вызов. это выглядит как JSON, так что, возможно, json_decode это то, что вы ищете?

2

Как говорят @ kao3991 и @andrew, ваши данные — это JSON, а не сериализованный массив. Попробуй это:

$query = '{"as":"AS38484 Virgin Broadband VISP","city":"Adelaide","country":"Australia","countryCode":"AU","isp":"iseek Communications","lat":-27,"lon":133,"org":"iseek Communications","query":"1.178.0.144","region":"","regionName":"","status":"success","timezone":"","zip":""}';
$query = json_decode($query, true);
if($query && $query['status'] == 'success') {
if(!empty($query['city'])) {
$city =  $query['city'];
// routine that uses $city gets called
} else {
$lat = $query['lat'];
$lon = $query['lon'];
// routine that uses $lat, $lon gets called
}
}
0
По вопросам рекламы [email protected]