2011-07-11 98 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);