如何遍历从xml加载到php的数组

时间:2018-08-01 15:10:06

标签: php xml

我有一个XML文件,如下所示:

<Main>
<SubMain>
  <First>10570</First>
  <Time>07:33:51</Time>
  <Result>500</Result>
  <Taken>8:14</Taken>
  <Results>
    <int>100</int>
    <int>100</int>
    <int>85</int>
    <int>100</int>
    <int>100</int>
    <int>100</int>
    <int>100</int>
  </Results>
</SubMain>
</Main>

我正在使用simplexml_load_file从文件加载到PHP:

   $xml=simplexml_load_file("note.xml") or die("Error: Cannot create object");
    foreach($xml->children() as $child)
   {
        echo $child->getName() . ": " . $child->First . $child->Time . $child->Taken ."<br>";

    }

当我在结果行中加载时,我没有得到任何返回的值,如何进入该子数组?抱歉,这是一个愚蠢的问题,但是今天让我难过!

编辑: 删除了拼写错误,因为它在代码中不存在,还需要清除“ First”,“ Time”,“ Result”等正在返回期望值,这是我似乎无法从中提取数据的子数组(“ Results”)。

1 个答案:

答案 0 :(得分:1)

使用SimpleXML时返回的所有值都是SimpleXMLElement对象,可以将其转换为本机类型(例如var_dump($xml->SubMain->First);)。它还实现了Traversable,因此可以在foreach循环中使用。

要获取<int>的值,您将需要遍历<Result>的子级:

foreach ($xml->SubMain->Results->children() as $result) {
    // $result is a SimpleXMLElement object, needs casting
    var_dump(intval($result));
}

您也可以直接转换为数组,但请注意,您将拥有一个字符串数组:

$ints = (array) $xml->SubMain->Results->int;
var_dump($ints); // actually strings

因此您可以执行以下操作:

$ints = array_map('intval', (array) $xml->SubMain->Results->int);
var_dump($ints);