こんにちは、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
(
)
)
)
これは素晴らしいことですが、今は継続的にループして、タグがなくなるまですべてのタグを追加する必要があります。