3

有谁知道我是否可以强制 SimpleXMLElement 变量始终是一个数组?

<result>
    <item>
        <id>1</id>
        <name>name 1</name>
    </item>
    <item>
        <id>2</id>
        <name>name 2</name>
    </item>
</result>

通过 simplexml_load_string() 解析上述 XML 时,我得到以下对象

SimpleXMLElement Object
(
    [item] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [id] => 1
                [name] => name 1
            )
        [1] => SimpleXMLElement Object
             (
                [id] => 2
                [name] => name 2
            )
    )
)

这很棒,因为我可以遍历“项目”并获取单个对象。但是当 item 是单个条目时,如下所示,我得到一个不同的对象结构,它破坏了我的循环,因为我开始循环通过“id”和“name”而不是对象。

<result>
    <item>
        <id>1</id>
        <name>name 1</name>
    </item>
</result>

SimpleXMLElement Object
(
    [item] => SimpleXMLElement Object
    (
           [id] => 1
           [name] => name 1    
    )

)

无论如何强制“项目”成为一个带有 simplexml_load_string() 或重新构造 XML 的数组?

4

1 回答 1

2

你不需要把它作为一个数组,一个简单的检查就可以了。像

if(is_array($xml->result->item))
{
    //loop here
}
else
{
    //only one object
}

此外,无论是一个元素还是多个元素,一个单独的 foreach 都可以完成工作。例如

<?php
$string="
<result>
    <item>
        <id>1</id>
        <name>name 1</name>
    </item>

</result>";

$xml = simplexml_load_string($string);

//print_r($xml);


foreach($xml->item as $item)
{
echo $item->id."\n";
}
?>

这也适用于多个项目。见小提琴

小提琴

于 2013-10-04T14:15:12.550 回答