1

我的 php 简单 xml 对象有问题。

我的日志中有以下 xml 数据

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [title] => test
            [scanner] => Data
            [id] => WordData
            [position] => 1800
            [error] => false
            [num] => 6
        )

    [subpod] => Array
        (
            [0] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => Surnames
                        )

                    [plaintext] => Common (US population: 650 people, white: 63% | black: 35%)
                    [img] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (

                                    [alt] => Common (US population: 650 people, white: 63% | black: 35%)
                                    [title] => Common (US population: 650 people, white: 63% | black: 35%)
                                    [width] => 349
                                    [height] => 18
                                )

                        )

                )

            [1] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => Cities
                        )

                    [plaintext] => Littleton Common (Massachusetts, 2789 people)
                    [img] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (

                                    [alt] => Littleton Common (Massachusetts, 2789 people)
                                    [title] => Littleton Common (Massachusetts, 2789 people)
                                    [width] => 287
                                    [height] => 18
                                )

                        )

                )

            [2] => SimpleXMLElement Object
                (
                    [@attributes] => Array
                        (
                            [title] => Buildings
                        )

                    [plaintext] => Rotunda on Woolwich Common (London, Greater London)
                    [img] => SimpleXMLElement Object
                        (
                            [@attributes] => Array
                                (

                                    [alt] => Rotunda on Woolwich Common (London, Greater London)
                                    [title] => Rotunda on Woolwich Common (London, Greater London)
                                    [width] => 356
                                    [height] => 18
                                )

                        )

                )
              .....more simpleXmlElement object
          )
)

我的 php 变量$xmlObj = SimpleXMLElement Object但是当我有以下

if (is_array($xmlObj->subpod)){
    echo 'is array';    
}else {
    echo 'not array';
}

输出总是“不是数组”,我希望我的代码回显“是数组”

我认为$xmlObj->subpod是一个数组。当我测试$xmlObj->subpod[0]->plaintext时,它实际上会返回字符串。我不知道如何解决这个问题。任何人都可以帮忙吗?

4

2 回答 2

2

SimpleXMLElement ObjectEverything is 中SimpleXMLElement Object,print_r 和 var_dump 有时是关于数组的——它们是可遍历的对象,但您可以对它们执行大多数操作,就好像它们是数组一样。如果您坚持使用纯数组,则可以将此节点转换为数组:

$subpod = (array)$xmlObj->subpod;
于 2012-10-31T00:19:46.977 回答
2

如果你这样做var_dump($xmlObj->subpod),你会发现它仍然是一个SimpleXMLElement对象。但是,它仍然可以像数组一样被调用。(请参阅此示例后面的注释,它暗示该类实现了ArrayAccess,即使类文档没有。)

检查此结构的正确方法是使用SimpleXMLElement::count()

if ($xmlObj->subpod->count() > 0) { ... }

编辑:您问题中的输出可能来自print_r,这有时在其输出中是无用的(例如,告诉您某些东西不是数组)。尝试var_dump改用,因为它通常对调试更有用。这里唯一需要注意的是,您看不到 SimpleXMLElement 对象的整个嵌套对象结构!

于 2012-10-31T00:08:03.183 回答