2015-06-06 1 views
0

Приветствую всех!Неопределенная ошибка смещения в php?

Я пытаюсь разобрать JSON/XML из OSM (Overpass Turbo) в php и попытаться получить значение speedlimit. Я могу получить значение, но до того, что есть некоторые ошибки

«Undefined смещение: 1 в C: \ XAMPP \ HTDOCS \ android_connect \ тест-osm.php на линии 44», что этот код if ($temp[1]=="maxspeed")

То, что я пытаюсь это:

Первое: После получения результата от OSM, я разорвать ответ с «<» тег в массив с именем «resultArr»

Second: Затем я разбиваю «resultArr» на «« »теги в массив под названием« temp ».

Ниже приведен файл PHP:

<?php 
//$lat = isset($_GET['lat']) ? floatval($_GET['lat']) : ""; 
//$lng = isset($_GET['lng']) ? floatval($_GET['lng']) : ""; 

$lat = 24.883968; 
$lng = 55.544899; 

//$latm = -0.00015 + $lat; 
$latm = 54.580460; 
//echo $latm. "\n"; 
//$latp = 0.00015 + $lat; 
$latp = 54.580860; 
//echo $latp. "\n"; 
//$lngm = -0.00015 + $lng; 
$lngm = 24.326180; 
//echo $lngm. "\n"; 
//$lngp = 0.00015 + $lng; 
$lngp = 24.336580; 
//echo $lngp; 

$json_url = 'http://overpass.osm.rambler.ru/cgi/interpreter'; 

$data = '<query type="way"> <bbox-query s="' . $lngm . '" w="' . $latm . '" n="' . $lngp . '" e="' . $latp . '"/> <!--this is auto-completed with the current map view coordinates.--> </query> <print/>'; 

$ch = curl_init($json_url); 

$options = array(
CURLOPT_POST => true, 
CURLOPT_HTTPHEADER => array('Content-type: application/json') , 
CURLOPT_POSTFIELDS => $data, 
CURLOPT_RETURNTRANSFER => true, 
); 

curl_setopt_array($ch, $options); 
$result = curl_exec($ch); 

$resultArr = explode("<",$result); //Array without "<" tags! 

foreach ($resultArr as $val) { 
    $temp = explode('"', $val); //Array without """ tags! 
    //print_r ($temp); 

//Trying to check if temp[1] is maxspeed, then get the value of temp[3]... 
      if ($temp[1]=="maxspeed") 
      $speedlimit=$temp[3]; 
    } 
    echo $speedlimit; 

    ?> 

Примечание: комментарии в этом только для целей проверки ...

Я знаю, что я делаю некоторые небольшие ошибки, я надеюсь, что кто-то мог бы сказать мне, что я делаю неправильно или направил в правильное направление!

Спасибо большое!

+0

@mmd - любая идея об этом ?? это часть этого вопроса .. – 3mmaar

ответ

1

проблема заключается в том, что не все пути содержат тег называется MaxSpeed ​​поэтому вы должны проверить, если

isset($temp[1]) && $temp[1] == "maxspeed" 

что вы могли бы также сделать, это использовать SimpleXML, как это:

$xml = simplexml_load_string($result); 

foreach ($xml->way as $i) { 
    foreach ($i->tag as $tag) { 
     if ($tag['k'] == "maxspeed") { 
      $maxspeed = $tag['v']; 
      break; 
     } 
    } 
} 

echo $maxspeed; 
+0

ой! правый .. спасибо много ... это помог много ... !! thanku again .. – 3mmaar

+0

если я использую второй вариант, который вы предложили, так как я могу использовать функцию isset, если нет максимальной скорости? Я проверю массив $ xml? – 3mmaar

+1

Во втором варианте вам не нужно использовать isset – gabo

1

Синтаксис ошибка, может быть? Отсутствуют фигурные скобки для утверждения IF?

if ($temp[1]=="maxspeed") 
$speedlimit=$temp[3]; 

должно быть:

if ($temp[1]=="maxspeed") { 
$speedlimit=$temp[3]; 
}