何不亲自尝试一下 (demo):
$foo = new SimpleXmlElement(
'<foo>
<bar>
<baz id="b1"/>
<baz id="b2"/>
<baz id="b3"/>
</bar>
</foo>
');
那就做吧
var_dump($foo->bar->baz[0]->children());
输出
object(SimpleXMLElement)#4 (0) {}
那就做吧
var_dump($foo->bar->children());
输出
object(SimpleXMLElement)#2 (1) {
["baz"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#3 (0) {
}
[1]=>
object(SimpleXMLElement)#5 (0) {
}
[2]=>
object(SimpleXMLElement)#6 (0) {
}
}
}
如何通过 SimpleXMLElement 进行 foreach?我以为你只能用数组来做到这一点?
好吧,那是错误的。您可以 foreach 任何 Traversable(例如对象和数组等)和任何实现 Iterator 接口的对象。这是SimpleXmlElement的类签名
Class [ <internal:SimpleXML> <iterateable> class SimpleXMLElement implements Traversable ] {
另外,$second_gen 值到底是怎么回事?所以 children() 返回一个关联数组的数组...?
不,它没有。它返回一个SimpleXmlElement。通过数组访问访问SimpleXmlElement 从当前节点获取属性(如果是数字,则按位置访问子节点),例如
echo $foo->bar->baz[2]['id']; // prints "b3"
这有点不明显,因为SimpleXmlElement 没有实现ArrayAccess,但它就是implemented in C。有关更多示例,请参阅http://www.php.net/manual/en/simplexml.examples-basic.php。