【问题标题】:Why does is_array() return false?为什么 is_array() 返回 false?
【发布时间】:2010-11-30 20:13:13
【问题描述】:

我有这个 SimpleXML 对象:

object(SimpleXMLElement)#176 (1) {
 ["record"]=>
 array(2) {
  [0]=>
  object(SimpleXMLElement)#39 (2) {
     ["f"]=>
     array(2) {
       [0]=>
       string(13) "stuff"
       [1]=>
       string(1) "1"
     }
  }
  [1]=>
  object(SimpleXMLElement)#37 (2) {
    ["f"]=>
    array(2) {
      [0]=>
      string(13) "more stuff"
      [1]=>
      string(3) "90"
    }
  }
}

为什么 is_array($object->record) 返回 false?它清楚地表明它是一个数组。为什么我用 is_array 检测不到?

另外,我无法使用 (array) $object->record 将其转换为数组。我收到此错误:

警告:目前还不能 将复杂类型分配给属性

【问题讨论】:

  • 永远不要相信 var_dump()print_r() 与 SimpleXML。

标签: php arrays oop simplexml


【解决方案1】:

SimpleXML 节点是可以包含其他 SimpleXML 节点的对象。使用iterator_to_array().

【讨论】:

  • 我接受了这个答案,因为它允许我完成我的任务。谢谢大家的意见。
【解决方案2】:

这不是一个数组。 var_dump 输出具有误导性。考虑:

<?php
$string = <<<XML
<?xml version='1.0'?>
<foo>
 <bar>a</bar>
 <bar>b</bar>
</foo>
XML;
$xml = simplexml_load_string($string);
var_dump($xml);
var_dump($xml->bar);
?>

输出:

object(SimpleXMLElement)#1 (1) {
  ["bar"]=>
  array(2) {
    [0]=>
    string(1) "a"
    [1]=>
    string(1) "b"
  }
}

object(SimpleXMLElement)#2 (1) {
  [0]=>
  string(1) "a"
}

正如你看到的第二个var_dump,它实际上是一个SimpleXMLElement

【讨论】:

    【解决方案3】:

    我使用count()函数解决了这个问题:

    if( count( $xml ) > 1 ) {
        // $xml is an array...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2014-11-17
      • 2014-03-11
      • 2019-07-12
      • 2012-08-24
      • 2013-03-08
      相关资源
      最近更新 更多