2011-12-27 3 views
0

У меня есть этот php-файл, который получает точки (id, name, geolocation) из london. Проблема в том, что я получаю правильные результаты как json-формат, но когда я его декодирую и пытаюсь get to содержит массив результатов. Я получаю сообщение об ошибке. Как я могу получить данные из атрибута '/ location/location/contains'?PHP с freebase/location/содержит

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> 
<title>search</title> 
</head> 

<body> 
<?php 
function freebasequery ($fid){ 
$query = array(array('id' => $fid, '/location/location/contains'=>array(array('id'=>NULL,'name' => NULL,'/location/location/geolocation' =>array(array('/location/geocode/longitude' =>NULL,'/location/geocode/latitude' => NULL)))))); 
$query_envelope = array('query' => $query); 
$service_url = 'http://api.freebase.com/api/service/mqlread'; 
$url = $service_url . '?query=' . urlencode(json_encode($query_envelope)); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$response = curl_exec($ch); 
curl_close($ch); 
return $response; 
} 
$points=freebasequery('/en/london'); 
//echo $points; 
$results=json_decode($points)->result; 
foreach($results as $poi){ 
    echo $poi->id; 
    $contains="/location/location/contains"; 
    $poisarray=$poi->$contains; 
    foreach($poisarray as $point){ 
     echo $point->id; 
    } 
} 


?> 
</body> 
</html> 
+0

Можете ли вы показать нам ошибку, которую вы получаете? Случается ли это только с/en/london как $ fid, или это происходит с любым идентификатором местоположения? –

+0

Я получаю правильный ответ от freebase как формат json, например (с ограничением) {"code": "/ api/status/ok", "result": [{"/ location/location/contains": [{"/location/location/geolocation ": [{"/location/geocode/latitude ": 51.533299999999997,"/location/geocode/longitude ": -0.16669999999999999}]," id ":"/en/london_borough_of_camden "," name ": «London Borough of Camden»}], «id»: «/ en/london»}], «status»: «200 OK», «transaction_id»: «cache; cache03.p01.sjc1: 8101; 2011-12- 27T17: 04: 01Z; 0047 "} – fokion

+0

, но когда я делаю это как массив, я не могу получить идентификатор мест в«/location/location/contains » – fokion

ответ

0

Ошибка это на json_decode (Это требует, чтобы иметь истинное) решение:

json_decode($points,true); 

, а затем я могу получить доступ к массиву данных Я хочу, как это:

$results["result"][0]["/location/location/contains"]; 
+0

* это требует наличия истины *: ну, это не так. Вы работали над проблемой, но она должна была работать так, как вы ее использовали, используя нотацию '->'. Проблема, которую я вижу с вашим исходным кодом, является орфографической ошибкой в ​​имени переменной * $ poisarray *. – trincot

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