在 PHP 開發中,將陣列資料轉換為 XML 格式是常見需求,特別是在 API 串接或資料交換場景。本文提供一個完整的自訂函數 array_Xml(),能夠遞迴處理多維陣列,並正確產生符合標準的 XML 結構。
<?php
$elementLevel = 0;
function array_Xml($array, $keys = '') {
global $elementLevel;
if (!is_array($array)) {
if ($keys == '') {
return $array;
} else {
return "\n<$keys>" . $array . "</$keys>\n";
}
} else {
$text = '';
foreach ($array as $key => $value) {
$haveTag = true;
if (is_numeric($key)) {
$key = $keys;
$haveTag = false;
}
if ($elementLevel == 0) {
$startElement = "<$key>";
$endElement = "</$key>";
}
$text .= $startElement;
if (!$haveTag) {
$elementLevel++;
$text .= "<$key>" . array_Xml($value, $key) . "</$key>\n";
} else {
$elementLevel++;
$text .= array_Xml($value, $key);
}
$text .= $endElement;
}
return $text;
}
}
// 測試資料範例
$array = array(
"employees" => array(
"employee" => array(
array("name" => "name one", "position" => "position one"),
array("name" => "name two", "position" => "position two"),
array("name" => "name three", "position" => "position three")
)
)
);
echo array_Xml($array);
?>
$elementLevel 全域變數追蹤巢狀層級,確保標籤正確嵌套。<employees> <employee> <name>name one</name> <position>position one</position> </employee> <employee> <name>name two</name> <position>position two</position> </employee> <employee> <name>name three</name> <position>position three</position> </employee> </employees>
實際專案中,建議考慮使用 PHP 內建的 DOMDocument 或 SimpleXMLElement 類別,能提供更健壯的 XML 產生、驗證與編碼處理(特別是 UTF-8 與特殊字元轉義)。若資料量大,亦可評估 XMLWriter 串流式寫入以節省記憶體。
更多 PHP XML 操作技巧,請參考專題:《PHP 針對 XML 檔案操作技巧總結》、《PHP 陣列操作技巧大全》。