我對 RecurseXML 函式採用了稍微不同的方法。肚子餓的時候我在程式碼上遇到問題,因為它只覆寫了兩個 <maincourse>。所以我做了以下的修改:
<?php
$xml = new SimpleXMLElement(
'<meal>
<type>午餐</type>
<time>12:30</time>
<menu>
<entree>沙拉</entree>
<maincourse>
<part>船</part>
<part>牛排</part>
</maincourse>
<maincourse>
<part>魚</part>
<part>米飯</part>
</maincourse>
<maincourse>
<part>紅酒</part>
<part>起司</part>
</maincourse>
</menu>
</meal>');
$vals = array();
RecurseXML($xml,$vals);
foreach($vals as $key=>$value)
print("{$key} = {$value}<BR>\n");
function RecurseXML($xml,&$vals,$parent="") {
$childs=0;
$child_count=-1; $arr=array();
foreach ($xml->children() as $key=>$value) {
if (in_array($key,$arr)) {
$child_count++;
} else {
$child_count=0;
}
$arr[]=$key;
$k=($parent == "") ? "$key.$child_count" : "$parent.$key.$child_count";
$childs=RecurseXML($value,$vals,$k);
if ($childs==0) {
$vals[$k]= (string)$value;
}
}
return $childs;
}
?>
輸出如下:
type.0 = 午餐
time.0 = 12:30
menu.0.entree.0 = 沙拉
menu.0.maincourse.0.part.0 = 船
menu.0.maincourse.0.part.1 = 牛排
menu.0.maincourse.0 =
menu.0.maincourse.1.part.0 = 魚
menu.0.maincourse.1.part.1 = 米飯
menu.0.maincourse.1 =
menu.0.maincourse.2.part.0 = 紅酒
menu.0.maincourse.2.part.1 = 起司
menu.0.maincourse.2 =
menu.0 =
(不是很漂亮,但它解決了我的問題...)