PHP';s SimpleXMLElement::children()返回?

PHP';s SimpleXMLElement::children()返回?,php,simplexml,Php,Simplexml,根据报告: 返回SimpleXMLElement元素,无论节点是否有子节点 但首先,这对我来说没有意义。children()肯定会返回一个simplexmlements数组。如果节点有多个子节点,那么返回单个SimpleXMLElement如何表示这一点 其次,这与手册中的示例不符: foreach ($xml->children() as $second_gen) echo ' The person begot a ' . $second_gen['role']; 您如何通过Si

根据报告:

返回SimpleXMLElement元素,无论节点是否有子节点

但首先,这对我来说没有意义。children()肯定会返回一个simplexmlements数组。如果节点有多个子节点,那么返回单个SimpleXMLElement如何表示这一点

其次,这与手册中的示例不符:

foreach ($xml->children() as $second_gen)
   echo ' The person begot a ' . $second_gen['role'];
您如何通过SimpleXMLElement进行访问?我以为你只能用数组来做?还有,$second_gen的值到底是怎么回事?那么children()返回一个关联数组的数组

这里一定有一些我不知道的很深的PHP语法规则,所以请给我解释一下或指向相关的手册页。

为什么不自己试试():

输出

object(SimpleXMLElement)#4 (0) {}
object(SimpleXMLElement)#2 (1) {
  ["baz"]=>
  array(3) {
    [0]=>
    object(SimpleXMLElement)#3 (0) {
    }
    [1]=>
    object(SimpleXMLElement)#5 (0) {
    }
    [2]=>
    object(SimpleXMLElement)#6 (0) {
    }
  }
}
那就做吧

var_dump($foo->bar->baz[0]->children());
var_dump($foo->bar->children());
输出

object(SimpleXMLElement)#4 (0) {}
object(SimpleXMLElement)#2 (1) {
  ["baz"]=>
  array(3) {
    [0]=>
    object(SimpleXMLElement)#3 (0) {
    }
    [1]=>
    object(SimpleXMLElement)#5 (0) {
    }
    [2]=>
    object(SimpleXMLElement)#6 (0) {
    }
  }
}
您如何通过SimpleXMLElement进行访问?我以为你只能用数组来做

嗯,那是错误的。您可以foreach任何可遍历对象(例如对象和数组等)和实现迭代器接口的任何对象。这是
simplexmlement

Class [ <internal:SimpleXML> <iterateable> class SimpleXMLElement implements Traversable ] {
这有点不明显,因为
simplexmlement
没有实现
ArrayAccess
,但它是这样的。有关更多示例,请参见手册中的。

注意:SimpleXML制定了一条规则,将迭代属性添加到大多数 方法。不能使用var_dump()或任何其他 可以检查对象

这仅仅意味着返回的对象可以被迭代。因此,即使给定一个对象,也可以对其进行迭代

只需查看类定义: (请注意,它实现了)


因为您遍历的每个对象本身就是一个SimpleXML对象,所以您只需对其调用
children()
,就可以更深一层

@JohnP因为是周末;)