2011-08-15 56 views
1

我從提取中提取XML。有一個名爲標籤:PHP Break Apart數組變量

<georss:point>34.234 -34.435</georss:point> 

其中包含兩個變量,我將到MySQL 當我運行這段代碼,變量是「數組」。然後我把提取打出來的變數,不確定未來

$xmlString = str_replace('georss:point','point',$xmlString); 
$xml = new SimpleXMLElement($xmlString); 
$items = $xml->xpath('channel/item'); 
$closeItems = array(); 
foreach($items as $item) 
{  
    $latlng = explode(' ',trim($item->point)); 
    array(
      'lat'=>$latlng[0], 
      'lng'=>$latlng[1] 
    ); 

    $lat = array($latlng[0]); 
    $lng = array($latlng[1]); 

    echo $lat; 
    echo $lng; 
} 

當我把這些回聲陳述(在代碼的最後兩行)中,變量得到echod到屏幕上。但是,當我將這些變量放在數組之外時,這些值不會得到回聲。 我正在嘗試在數組外部獲取這些變量,以便我可以將這些變量插入到數據庫中。我試圖提取可變參數,但這會打印回'屏幕'陣列...不確定我需要做什麼從數組中提取這些變量。謝謝,

+0

只有一個經緯度,還是很多? – Prisoner

回答

0

一些觀察。

1)您可以register xpath namespaces而不是字符串
2)更換array('lat'=>$latlng[0],'lng'=>$latlng[1]);什麼都不做。這是一家死商店。
3)代替

$lat = array($latlng[0]); 
$lng = array($latlng[1]); 
echo $lat; 
echo $lng; 

你可以這樣做:echo $latlng[0].'-'.$latlng[1];
如果試圖echo一個數組,你總是會得到Array
使用特定索引來回顯個別元素。

4)另外,您可以使用list存儲變量直接
list($lat, $long) = explode(' ',trim($item->point));

編輯 插入多個結果到你的數據庫,結果存儲在一個數組:

$lat_long = array(); 
foreach($items as $item){ 
    $lat_long[] = explode(' ', $item); 
} 

然後稍後迭代通過這個數組並進行數據庫插入。

foreach($lat_long as $point){ 
    //do SQL injection prevention as well 
    //INSERT INTO your_table (`lat`, `long`) VALUES ($point[0], $point[1]); 
} 
+0

嗨,布賴恩,你的建議對我來說更有意義......但是,當我執行時,值是相同的。 list($ lat,$ long)= explode('',trim($ item-> point)); lat和lng在所有23個項目上總是相同的。 –

+0

@matt colley see編輯 –

+0

啊......「我明白了」說那個瞎子!非常感謝Brian! –

0

我想這:

$lat = array($latlng[0]); 
$lng = array($latlng[1]); 

應該是:

$lat = $latlng[0]; 
$lng = $latlng[1]; 
0

Obmitting約$陣列(..)經緯度[..]會做的伎倆,我想。

$lat = $latlng[0]; 
$lng = $latlng[1]; 
1

與這樣的版本替換你的foreach ...

$new_array = array(); 
foreach($items as $item) 
{  
    $latlng = explode(' ',trim($item->point)); 
    $new_array[] = array('lat'=>$latlng[0],'lng'=>$latlng[1]); 
} 

var_dump($new_array); 

這應該給你拉/長值的數組。