2011-07-11 129 views
1

我有一些XML,看起來像這樣:添加到關聯數組

<?xml version="1.0"?> 
    <data> 
<items> 
    <item><timestamp>2011-07-11T09:01:42Z</timestamp><title><![CDATA[ some data here ]]></title><link>http://twitter.com/aurl</link></item> 
    <item><timestamp>2011-05-11T09:01:42Z</timestamp><title><![CDATA[ some data here ]]></title><link>http://twitter.com/aurlhere</link></item> 
</items> 

,我想遍歷它,並將其添加到一個數組:

foreach($xml->items->item as $e) { 
       $feedData['timestamp'] = $e->timestamp; 
      $feedData['title'] = $e->title; 
      $feedData['link'] = $e->link; 
      $feedData['type'] = $e->type; 
     } 

    print_r($feedData); 

xml在那裏,如果我在foreach中放回一個回顯,我會得到10個回覆(其中包含我有多少項),但是當我將數組打印出來時,只有一行(這是xml文檔中的最後一項) )。

Array ([timestamp] => SimpleXMLElement Object ([0] => 2011-07-08T08:05:19Z) [title] => SimpleXMLElement Object () [link] => SimpleXMLElement Object ([0] => http://twitter.com.aurl) [type] => SimpleXMLElement Object ()) 

我懷疑我覆蓋每個循環上的數組。但爲什麼 ?它應該添加到數組中。對不起,我的php並不好...因此,懷疑是一個愚蠢的問題。

回答

3

那麼,只有一個$feedData數組,你總是設置一些特定鍵的值。 $feedData['timestamp']。你如何認爲這應該添加到陣列?密鑰是唯一的,同一個密鑰不能出現兩次,所以是的,你只是覆蓋了值。

看來你想要一個數組的數組:

$feedData = array(); 

foreach($xml->items->item as $e) { 
    $feedData[] = array(
     'timestamp' => $e->timestamp; 
     'title' => $e->title; 
     'link' => $e->link; 
     'type' => $e->type; 
    ); 
} 

看一看的array manual [docs]有關數組的更多信息。

+0

是的,這是我需要的。我在不同的階段添加到陣列中,所以這是我認爲最合適的。 –

4
$i = 0; 
foreach($xml->items->item as $e) { 
    $feedData[$i]['timestamp'] = $e->timestamp; 
    $feedData[$i]['title'] = $e->title; 
    $feedData[$i]['link'] = $e->link; 
    $feedData[$i]['type'] = $e->type; 
    $i++; 
} 

print_r($feedData);