2015-01-07 8 views
0

Я пытаюсь получить атрибут city из IP-адреса геолокации api. Пример того, что возвращается из API:PHP, если инструкция else проверяет, является ли поле api php пустым

{"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? И когда нет атрибута города, он также пропускает часть else и не устанавливает lat/lon.

Примечание: причина дифференциации между city и lat/lon погода апи я запрашивая предпочитает city, но не каждый IP может обеспечить один.

Благодаря

+0

Также в чем вопрос? – Rizier123

+0

Точка с запятой есть в коде :). Городской атрибут никогда не будет найден, проблема будет извиняться за редактирование. – Lanzafame

ответ

1

Два вопроса:

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

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

$query->city; 

не

$query['city']; 
2

$ запрос не сериализованная массив PHP, вы увидели бы, если бы вы не использовали «@» перед unserialize вызова. это похоже на JSON, так что, может быть, json_decode - это то, что вы ищете?

0

Как @ 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 
    } 
} 

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

  • Нет связанных вопросов^_^