有谁知道我是否可以强制 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”成为数组?
您不需要将其作为数组,只需进行简单的检查即可。喜欢
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)
这对于多个项目也非常有效。参见小提琴