为什么 is_array() 返回 false?

发布于 2024-10-05 15:21:56 字数 660 浏览 4 评论 0原文

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

警告:目前尚无法 将复杂类型分配给属性

I have this SimpleXML object:

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"
    }
  }
}

Why does is_array($object->record) return false? It clearly says it's an array. Why can't I detect it using is_array?

Also, I am unable to cast it as an array using (array) $object->record. I get this error:

Warning: It is not yet possible to
assign complex types to properties

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沫雨熙 2024-10-12 15:21:56

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

SimpleXML nodes are objects that can contain other SimpleXML nodes. Use iterator_to_array().

一紙繁鸢 2024-10-12 15:21:56

它不是一个数组。 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

It's not an array. The var_dump output is misleading. Consider:

<?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);
?>

Output:

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

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

As you can see by the second var_dump, it is actually a SimpleXMLElement.

維他命╮ 2024-10-12 15:21:56

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

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

I solved the problem using count() function:

if( count( $xml ) > 1 ) {
    // $xml is an array...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文