【问题标题】:PHP Array not being set correctlyPHP 数组未正确设置
【发布时间】:2012-10-19 12:49:57
【问题描述】:

我正在尝试使用以下代码从 XML 文件中读取一些 RSS 提要详细信息:

$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 对象的值?我只想要价值而不是对象。有人可以指出我做错了什么吗?

【问题讨论】:

    标签: php arrays simplexml


    【解决方案1】:

    SimpleXML 在其对象上实现__toString() magic method,否则这些对象由对象引用分配。当它们在echoed 字符串的上下文中使用时(例如),您将获得返回的字符串值,但在正常分配或引用时,您将获得整个SimpleXMLElement 对象。

    如果你想要字符串值,你可以将它转换为字符串:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 2011-07-23
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 2013-02-28
      相关资源
      最近更新 更多