PHP:simplexml_load_string() 强制数组

The*_*lis 5 php xml arrays

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

<result>
    <item>
        <id>1</id>
        <name>name 1</name>
    </item>
    <item>
        <id>2</id>
        <name>name 2</name>
    </item>
</result>
Run Code Online (Sandbox Code Playgroud)

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

SimpleXMLElement Object
(
    [item] => Array
    (
        [0] => SimpleXMLElement Object
            (
                [id] => 1
                [name] => name 1
            )
        [1] => SimpleXMLElement Object
             (
                [id] => 2
                [name] => name 2
            )
    )
)
Run Code Online (Sandbox Code Playgroud)

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

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

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

)
Run Code Online (Sandbox Code Playgroud)

无论如何,是否可以使用 simplexml_load_string() 或通过重新构造 XML 来强制“item”成为数组?

Han*_*nky 4

您不需要将其作为数组,只需进行简单的检查即可。喜欢

if(is_array($xml->result->item))
{
    //loop here
}
else
{
    //only one object
}
Run Code Online (Sandbox Code Playgroud)

此外,无论有一个元素还是多个元素,单个 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";
}
?>
Run Code Online (Sandbox Code Playgroud)

这对于多个项目也非常有效。参见小提琴

小提琴