将SimpleXMLElement子元素作为数组进行访问

时间:2013-11-07 13:41:38

标签: php simplexml

如何将SimpleXMLElement子元素作为数组访问?

SimpleXMLElement(9) {
 name => "John" (11)
 phone => array(2) [
    0 => "556 221 000" (19)
    1 => "312 555 110" (19)
 ]
}

根据这篇文章http://www.sitepoint.com/parsing-xml-with-simplexml/,我应该通过

轻松访问它
$sxElement->phone[0];

但是转储只返回:

SimpleXMLElement(0)

我需要在for循环中访问它。感谢。

编辑(XML示例):

<company>
  <phonebook>
    <name>John</name>
    <phone>556 221 000</phone>
    <phone>312 555 110</phone>
  </phonebook>
</company>

我需要通过我的foreach在另一个对象上,并根据迭代器值附加正确的手机。

3 个答案:

答案 0 :(得分:3)

你必须将数据转换为数组,所以试试这个(它对我有用)。

$el = new SimpleXMLElement(
    '<company>
      <phonebook>
        <name>John</name>
        <phone>556 221 000</phone>
        <phone>312 555 110</phone>
      </phonebook>
    </company>'
);

$array = (array) $el->phonebook->phone;

这个输出是array准备好进行操作。

Array
(
    [0] => 556 221 000
    [1] => 312 555 110
)

另一种获取密钥的方法。

foreach($sxElement->phone as $i => $value) {
    echo "{$i} : {$value}" . PHP_EOL;
}

虽然外循环无法访问它。

答案 1 :(得分:1)

您是否尝试过:

$sxElement->phone[0]->__toString();

希望有所帮助。

此致

马塞洛

答案 2 :(得分:0)

当我想使用数组时,我在使用simpleXML时找到的一个解决方案是使用json_decode()中的“true”参数将整个事物传入和传出json。然后我有一个关联数组,这是我习惯使用的更多。