PHP:simplexml_load_string()强制数组

时间:2013-10-04 14:11:31

标签: php xml arrays

有没有人知道我是否可以强制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”并获取单个对象。但是当item是单个条目时,如下所示,我得到一个不同的对象结构,这会破坏我的循环,因为我开始循环遍历“id”和“name”而不是对象。

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

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

)

是否有强制“item”为simplexml_load_string()的数组或重构XML?

1 个答案:

答案 0 :(得分: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";
}
?>

对于多个项目也很好。见小提琴

<强> Fiddle