2012-06-15 125 views
0

我正在嘗試使用Google地圖方向API來映射從數據庫連接城市的路由。我的問題是,我卡在一個點,我應該從PHP腳本通過JSON返回值。 我的數據映射爲通知數組:PHP和JSON:返回合適的格式

$data=array('chicago','new york','lebanon','maysvile','greenfield'); 

我的目的是從我的數據數組返回以下格式。

var request = { 
    origin:start, 
    destination:end, 
    waypoints:[{ 
     location:"", 
     stopover:true 
    }], 
    travelMode: google.maps.DirectionsTravelMode.DRIVING 
} 

這是我得到了我的起點和終點:數組中的第一個和最後一個元素:

$start=reset($data);  
$end=end($data); 

數據使用json_encode用PHP來()返回

$response=array('origin'=>$start,'destination'=>$end,'travelMode'=>"google.maps.DirectionsTravelMode.DRIVING"); 
echo json_encode($response); 

的格式返回不正確。另外我無法弄清楚我應該如何做中點。中點是$ start和$ end被選中後剩下的所有值。 任何想法是高度appreciated.Thanks

+0

'google.maps.DirectionsTravelMode.DRIVING'不是一個字符串(至少不是一個字符串,其值爲'google.maps.DirectionsTravelMode.DRIVING'')。創建JSON時需要使用它的值。 – ThiefMaster

+0

如何創建/映射包含它的請求而不排除其他參數? –

回答

1
$response = array(
    'origin' => array_shift($data), 
    'destination' => array_pop($data), 
    'waypoints' => array(), 
    'travelMode' => 'DRIVING' 
); 
foreach($data as $wp) { 
    $response['waypoints'][] = array('stopover' => true, 'location' => $wp); 
} 
echo json_encode($response); 

注意array_shiftarray_pop修改$data陣!

腳本的輸出是:

{ 
    "origin": "chicago", 
    "destination": "greenfield", 
    "waypoints": [ 
     { 
      "stopover": true, 
      "location": "new york" 
     }, 
     { 
      "stopover": true, 
      "location": "lebanon" 
     }, 
     { 
      "stopover": true, 
      "location": "maysvile" 
     } 
    ], 
    "travelMode": "DRIVING" 
} 
+0

我喜歡你爲路點,出發地和目的地所做的方式,但最終的格式不正確。這裏是輸出: –

+0

{「origin」:「GEORGETOWN KY 40324」,「destination」:「GEORGETOWN KY 40324」,「waypoints」:[「Mantachie MS 38855」],「travelMode」:「google.maps的值.DirectionsTravelMode.DRIVING「} –

+0

已更新。現在它應該做你想做的事。 – ThiefMaster

0

當你得到的迴應從PHP回來,這將是一個字符串,包含JSON格式的數據。

您將需要使用:

var myObject = JSON.parse(stringOfJson); 

要將其轉換成JSON對象。

如果你想要的數據的PHP表示,爲什麼不能在PHP中創建一個對象來表示它:

class RouteInformation 
{ 
    public $Origin; 
    public $Destination; 
    public $Waypoints; 
    public $TravelMode; 

    public function __construct() 
    { 
     $this->Waypoints = array(); 
    } 
} 

然後,您可以序列化此對象JSON,它會在你需要的格式。

$response = new RouteInformation(); 
$response->Origin = array_shift($data); 
$response->Destination = array_pop($data); 
$response->TravelMode = 'DRIVING'; 

foreach($data as $wp) { 
    $response->Waypoints[] = array('stopover' => true, 'location' => $wp); 
} 

echo json_encode($response); 

你可以更進一步,創建一個Waypoint類來表示數組中的每個Waypoint。

+0

我認爲他已經這樣做了,或者有一個圖書館爲他做。否則,在開發人員工具中查看時,他不會得到「非json」表示。 – ThiefMaster

+0

@ThiefMaster你是對的,我們已經擁有它了。我們如何格式化返回類似origin的結果:'origin name',destination:'destination name',....注意逗號(,) –

+0

@nairobicoder已更新以顯示等式的PHP端。 – Fenton