嗨,伙计们,我正在尝试编写一个函数,该函数将使用 simplexml 将 xml 转换为数组。我知道那里已经编写了一些函数,但我需要自己编写。这个 xml 只是一个例子,可能是不同的格式,所以我需要这个函数与任何类型的 xml 结构一起使用,基本上遍历所有标签并循环遍历所有级别的所有标签并创建数组。
这是我的 xml 的样子
<approval id='x34445454'>
<p_data>
<p_wide>3.5</p_wide>
<p_hieight>2</p_hieight>
</p_data>
<bars></bars>
<timer>
<loc_time>
<year>2013</year>
<month>4</month>
<day>2</day>
</loc_time>
<start>
<year>2013</year>
<month>04</month>
<day>02</day>
</start>
<end>
<year>2013</year>
<month>04</month>
<day>09</day>
</end>
</timer>
<customer_data>
<custid>8789</custid>
<email>myemail@gmail.com</email>
<description>Some item description</description>
<optout>false</optout>
</customer_data>
<large>2</large>
<job name='ord1'>
<guides></guides>
<preview>
<type>mytpe</type>
<info_message></info_message>
<label>both</label>
<index>100</index>
<imagebox>
<data>703.448275862069</data>
<height>11.068965517241</height>
<shift>0</shift>
</imagebox>
<OK_Screen></OK_Screen>
</preview_file>
<preview_file>
<type>mytpe3</type>
<info_message></info_message>
<label>sides</label>
<index>100</index>
<imagebox>
<data>111.448275862069</data>
<height>11.554</height>
<shift>0</shift>
</imagebox>
<OK_Screen></OK_Screen>
</preview>
</job>
<job name='ord1'>
<guides></guides>
<preview>
<type>mytpe</type>
<info_message></info_message>
<label>both</label>
<index>100</index>
<imagebox>
<data>703.448275862069</data>
<height>11.068965517241</height>
<shift>0</shift>
</imagebox>
<OK_Screen></OK_Screen>
</preview_file>
<preview_file>
<type>mytpe3</type>
<info_message></info_message>
<label>sides</label>
<index>100</index>
<imagebox>
<data>111.448275862069</data>
<height>11.554</height>
<shift>0</shift>
</imagebox>
<OK_Screen></OK_Screen>
</preview>
</job>
到目前为止 iv 写了这个函数
function xmltest($xml) {
$arr = array();
foreach($xml as $element) {
$arr[$element->getName()]=array();
foreach($element->attributes() as $key=>$value) {
$arr[$element->getName()][$key]=(string)$value;
}
foreach($element as $key=>$value) {
$arr[$element->getName()][$key]=array();
if(!$value->children() && (!empty($value))) {
$arr[$element->getName()][$key]=(string)$value;
}
}
}
return $arr;
}
这是返回
Array
(
[approval] => Array
(
[id] => x34445454
[p_data] => Array
(
)
[bars] => Array
(
)
[timer] => Array
(
)
[customer_data] => Array
(
)
[large] => 2
[job] => Array
(
)
)
)
这很棒,但现在我需要不断循环并添加所有标签,直到没有更多标签为止。