我有这个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将其强制转换为数组。我收到这个错误:
警告:目前还不可能 将复杂类型分配给属性
答案 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...
}