【发布时间】:2014-09-08 07:20:20
【问题描述】:
我编写了一个递归函数,它应该将 xml 转换为关联数组。 到目前为止,我编写的函数适用于仅包含 1 个子元素的根元素,但是当我在根元素超过 1 个子元素的 xml 上尝试它时,它只输出第一个子元素。
这是我写的函数:
$values 是来自 xml_parse_into_struct 的值数组。
function _xml2array($append, $values, $i) {
if($i == count($values) - 1) {
return $append;
}
switch($values[$i]['type']) {
case 'open':
$tag = $values[$i]['tag'];
$append[$tag][] = _xml2array($append[$tag], $values, ++$i);
return $append;
case 'complete':
$tag = $values[$i]['tag'];
$val = $values[$i]['value'];
$append[$tag] = $val;
return _xml2array($append, $values, ++$i);
case 'close':
return $append;
}
}
function xml2array($values) {
return _xml2array(array(), $values, 0);
}
这是我正在处理的 xml:
<?xml version="1.0"?>
<espadas>
<espada>
<name>Coyote Starrk</name>
<rank>Primera</rank>
<resurreccion>
<release-command>Kick About</release-command>
<zan-name>Los Lobos</zan-name>
</resurreccion>
</espada>
<espada>
<name>Baraggan Louisenbairn</name>
<rank>Segunda</rank>
<resurreccion>
<release-command>Rot</release-command>
<zan-name>Arrogante</zan-name>
</resurreccion>
</espada>
</espadas>
这是我得到的输出:
Array
(
[ESPADAS] => Array
(
[0] => Array
(
[ESPADA] => Array
(
[0] => Array
(
[NAME] => Coyote Starrk
[RANK] => Primera
[RESURRECCION] => Array
(
[0] => Array
(
[RELEASE-COMMAND] => Kick About
[ZAN-NAME] => Los Lobos
)
)
)
)
)
)
)
我只生第一个孩子,我做错了什么? 任何形式的帮助将不胜感激。
编辑: 再次尝试调试,并意识到我需要放置一个基本案例。 但这仍然给我留下了一个只有第一个孩子的数组。
【问题讨论】:
-
我没有考虑到这一点,我可以删除根元素
ESPADAS并将根键设置为ESPADA并将每个ESPADA存储在其当前位置
标签: php arrays xml recursion xml-parsing