首頁  >  文章  >  後端開發  >  PHP處理數組和XML之間的互相轉換

PHP處理數組和XML之間的互相轉換

高洛峰
高洛峰原創
2016-12-22 14:48:391003瀏覽

在開發中,我們常常會遇到陣列與XML之間的互相轉換,尤其在處理介面開發的時候常用到,例如對方客戶端POST一個XML格式的資料到伺服器上,伺服器上的程式要負責接收解析,還有需要將資料表資料以XML格式提供給第三方等等應用。
本文我們將簡單介紹如何使用PHP處理陣列與XML之間的互相轉換。

PHP將陣列轉換成XML
 PHP可以將陣列轉換成x​​ml格式,簡單的方法是遍歷數組,然後將陣列的key/value轉換成xml節點,再直接echo輸出了,例如:

function arrayToXml($arr){
$xml = "<root>";
foreach ($arr as $key=>$val){
if(is_array($val)){
$xml.="<".$key.">".arrayToXml($val)."</".$key.">";
}else{
$xml.="<".$key.">".$val."</".$key.">";
}
}
$xml.="</root>";
return $xml;
}

   

我測試了下,這個最簡單,速度又快,支援多為數組,中文也不會亂碼。

 另一個方法是利用DOMDocument來產生xml結構:

function arrayToXml($arr,$dom=0,$item=0){
if (!$dom){
$dom = new DOMDocument("1.0");
}
if(!$item){
$item = $dom->createElement("root");
$dom->appendChild($item);
}
foreach ($arr as $key=>$val){
$itemx = $dom->createElement(is_string($key)?$key:"item");
$item->appendChild($itemx);
if (!is_array($val)){
$text = $dom->createTextNode($val);
$itemx->appendChild($text);
 
}else {
arrayToXml($val,$dom,$itemx);
}
}
return $dom->saveXML();
}

   

它同樣可以將陣列轉換成x​​ml,而且支援多維數組,產生的xmlxml也不會亂碼。

PHP將XML轉換成數組

 做介面開發的時候經常會碰到別人提交給你的是xml格式的數據,常見的微信接口、支付寶接口等,他們的接口如發送消息通信都是xml格式的,那我們先想辦法拿到這個xml數據,再轉換成陣列。

 假設我們取得到一個這樣的XML:

<root>
 
<user>
 
月光光abcd</user>
 
<pvs>13002</pvs>
 
 <ips>
 
<baidu_ip>1200</baidu_ip>
 
 <google_ip>1829</google_ip>
 
 </ips>
 
<date>2016-06-01</date>
 
 </root>

   

透過simplexml_load_string()解析讀取xml數據,然後先轉成json格式,再轉換成陣列。

function xmlToArray($xml){
 
 //禁止引用外部xml实体
 
libxml_disable_entity_loader(true);
 
$xmlstring = simplexml_load_string($xml, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
 
$val = json_decode(json_encode($xmlstring),true);
 
return $val;
 
}

   

調用xmlToArray()可得到以下結果:

PHP處理數組和XML之間的互相轉換得到數組後,我們就可以對資料進行各種處理了。


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

更多PHP處理數組和XML之間的互轉換相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn