2012-10-19 88 views
2

我想用下面的代碼來讀取XML文件的幾個RSS源的詳細信息:PHP數組沒有被正確設定

$this->feedFile = file_get_contents(__ROOT__ . '/assets/feedList.xml'); //Define this externally 
$this->feedDetailsArray = array(); 
$this->feedXML = new SimpleXMLElement($this->feedFile); 
echo "1. ========="; 
print_r($this->feedXML); 
echo "1. ========="; 
foreach($this->feedXML->Feed as $feedItem) { 
    echo "2. ========="; 
    echo "AJ:: feedName " . var_dump($feedItem->FeedName) . " feedURL " . var_dump($feedItem->FeedURL) . "\n"; 
    echo "2. ========="; 
    $feedDetails = array(
     "feedName" => $feedItem->FeedName, 
     "feedURL" => $feedItem->FeedURL/*, 
     'favIconURL' => $feedItem->FavIconURL 
     ); 
    echo "3. ========="; 
    var_dump($feedDetails); 
    echo "3. ========="; 

的print_r的輸出如下:

1. =========SimpleXMLElement Object 
(
    [Feed] => Array 
     (
      [0] => SimpleXMLElement Object 
       (
        [FeedName] => Hacker News 
        [FeedURL] => http://news.ycombinator.com/rss 
        [FavIconURL] => http://ycombinator.com/favicon.ico 
        [Segment] => Startups 
       ) 

    . 
    . 
    . 

的第一的var_dump(echo "feedName " . var_dump($feedItem->FeedName) . " feedURL " . var_dump($feedItem->FeedURL) . "\n";)輸出:

2. =========class SimpleXMLElement#38 (1) { 
    string(11) "Hacker News" 
} 
class SimpleXMLElement#38 (1) { 
    string(31) "http://news.ycombinator.com/rss" 
} 
AJ:: feedName feedURL 
2. ========= 

而第二輸出的var_dump:

3. =========array(2) { 
    'feedName' => 
    class SimpleXMLElement#38 (1) { 
     string(11) "Hacker News" 
    } 
    'feedURL' => 
    class SimpleXMLElement#37 (1) { 
     string(31) "http://news.ycombinator.com/rss" 
    } 
} 
3. ========= 

我的問題是,爲什麼"feedName" => $feedItem->FeedName聲明導致對象被賦值而不是SimpleXML對象的值?我只想要價值而不是對象。有人能指出我做錯了什麼嗎?

回答

3

SimpleXML在其對象上實現了__toString() magic method,否則這些對象由對象引用分配。當它們在echo ed字符串的上下文中使用時(作爲一個例子),你將得到返回的字符串值,但是在一個正常的賦值或引用時,你會得到整個SimpleXMLElement對象。

如果你想字符串值,你可以將其轉換爲字符串:

$feedDetails = array(
    "feedName" => (string)$feedItem->FeedName, 
    "feedURL" => (string)$feedItem->FeedURL 
); 
+0

這工作。謝謝 –