調用 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 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 流式解析,避免全量載入內存。