为什么is_array()返回false?

时间:2010-11-30 20:13:14

标签: php arrays oop simplexml

我有这个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将其强制转换为数组。我收到这个错误:

  

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

这不是一个阵列。 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

答案 2 :(得分:3)

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

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