首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 將 XML 對象轉數組:SimpleXMLElement 強制類型轉換技巧

     編輯:PHP 相關知識

問題背景

調用 API 返回 SimpleXMLElement 對象,直接操作屬性($obj->item->price)不符合 PHP 陣列習慣,且難以批量處理。

一鍵轉陣列

$resp = $client->execute($req, $sessionKey); // 返回 SimpleXMLElement
$items = $resp->items; // SimpleXMLElement 對象集合

$goods = [];
foreach ($items->item as $item) {
    $goods[] = (array) $item; // 強制轉換為關聯陣列
}

// $goods 現在是標準二維陣列
print_r($goods);

轉換前後對比

SimpleXMLElement 對象

SimpleXMLElement Object
(
    [cid] => 50003793
    [modified] => 2013-04-18 17:16:25
    [nick] => qq307819623
    [price] => 200.00
    [title] => Nokia N97全新行貨
)

轉換後陣列

Array
(
    [0] => Array
        (
            [cid] => 50003793
            [modified] => 2013-04-18 17:16:25
            [nick] => qq307819623
            [price] => 200.00
            [title] => Nokia N97全新行貨
        )
    [1] => Array
        (
            [cid] => 50024921
            [modified] => 2013-04-18 16:58:06
            [nick] => qq307819623
            [pic_url] => pic.jpg
            [price] => 888888.00
            [title] => 劉俊仲
        )
    ...
)

進階:遞歸轉換嵌套結構

function xmlToArray($xml) {
    if ($xml instanceof SimpleXMLElement) {
        $arr = (array) $xml;
        foreach ($arr as $k => $v) {
            $arr[$k] = xmlToArray($v);
        }
        return $arr;
    }
    return $xml;
}

$fullArray = xmlToArray($resp); // 整棵樹一次性轉換

注意事項

  • (array) 強制轉換淺層,子節點若仍是 SimpleXMLElement 需遞歸處理。
  • 屬性(@attributes)與文本值同級,需按業務邏輯提取。
  • 命名空間節點轉換後鍵名含 {ns}tag,建議先 registerXPathNamespace 再提取。
  • 大量數據建議用 XMLReader 流式解析,避免全量載入內存。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved