php陣列轉xml的遞迴實現
PHP中獎陣列轉為xml的需求是常見的,而且實現方法也有很多種,百度找了一下各種實現方法,但是基本是借組一些元件啥的。我就自己寫了一個字串拼組的方法,支援多維陣列。僅供參考,不足之處敬請不吝賜教!
/** * 將陣列轉換為xml * @param array $data 要轉換的陣列 * @param bool $root 是否要根節點 * @return string xml字串 * @author Dragondean * @url http://www.cnblogs.com/dragondean */ function arr2xml($data, $root = true){ $str=""; if($root)$str .= "<xml>"; foreach($data as $key => $val){ if(is_array($val)){ $child = arr2xml($val, false); $str .= "<$key>$child</$key>"; }else{ $str.= "<$key><![CDATA[$val]]></$key>"; } } if($root)$str .= "</xml>"; return $str; }
上面是實現的方法,第一個引數是你要轉換的陣列,第二個可選引數設定是否需要加<xml>根節點,預設是需要的。
測試程式碼:
$arr=array(`a`=>`aaa`,`b`=>array(`c`=>`1234` , `d` => "asdfasdf")); echo arr2xml($arr);
程式碼執行後的結果為:
<xml><a><![CDATA[aaa]]></a><b><c><![CDATA[1234]]></c><d><![CDATA[asdfasdf]]></d></b></xml>
———————- ———-
更新:
在使用過程中發現下面格式的陣列轉換會出現問題:
array( `item` => array( array( `title` => `qwe`, `description` => `rtrt`, `picurl` => `sdfsd`, `url` => `ghjghj` ), array( `title` => `jyutyu`, `description` => `werwe`, `picurl` => `xcvxv`, `url` => `ghjgh` ) ) );
轉換出來的結果是:
<xml> <item> <0> <title> <![CDATA[qwe]]> </title> <description> <![CDATA[rtrt]]> </description> <picurl> <![CDATA[sdfsd]]> </picurl> <url> <![CDATA[ghjghj]]> </url> </0> <1> <title> <![CDATA[jyutyu]]> </title> <description> <![CDATA[werwe]]> </description> <picurl> <![CDATA[xcvxv]]> </picurl> <url> <![CDATA[ghjgh]]> </url> </1> </item> </xml>
通常情況下,上面轉換出來的xml整<0><1>那層節點我們是不要的。但是在php中下標有不能同名,不能有多個item。怎麼辦呢?
我想了一個辦法就是給item下下標,比如item[0],item[1],在轉換過程中在去掉[]形式的下標,實現多個item節點並排。
函式修改後如下:
function arr2xml($data, $root = true){ $str=""; if($root)$str .= "<xml>"; foreach($data as $key => $val){ //去掉key中的下標[] $key = preg_replace(`/[d*]/`, ``, $key); if(is_array($val)){ $child = arr2xml($val, false); $str .= "<$key>$child</$key>"; }else{ $str.= "<$key><![CDATA[$val]]></$key>"; } } if($root)$str .= "</xml>"; return $str; }
那麼上面需要轉換的陣列也需要跟著變動一下:
$arr1 =array( `item[0]` => array( `title` => `qwe`, `description` => `rtrt`, `picurl` => `sdfsd`, `url` => `ghjghj` ), `item[1]` => array( `title` => `jyutyu`, `description` => `werwe`, `picurl` => `xcvxv`, `url` => `ghjgh` ) );
轉換後的xml如下:
<xml> <item> <title> <![CDATA[qwe]]> </title> <description> <![CDATA[rtrt]]> </description> <picurl> <![CDATA[sdfsd]]> </picurl> <url> <![CDATA[ghjghj]]> </url> </item> <item> <title> <![CDATA[jyutyu]]> </title> <description> <![CDATA[werwe]]> </description> <picurl> <![CDATA[xcvxv]]> </picurl> <url> <![CDATA[ghjgh]]> </url> </item> </xml>
相關文章
- PHP xml 轉陣列 陣列轉 xml 操作PHPXML陣列
- xml與陣列的相互轉換——phpXML陣列PHP
- php陣列如何轉換為xml的形式?PHP陣列XML
- php url傳遞陣列PHP陣列
- PHP 陣列底層實現PHP陣列
- PHP 樹-不需要遞迴的實現方法PHP遞迴
- PHP陣列轉換為js陣列PHP陣列JS
- 遞迴實現指數型列舉遞迴
- 靜態佇列,迴圈陣列實現佇列陣列
- 【深入 PHP】PHP7 陣列的底層實現PHP陣列
- PHP 實現按奇偶排序陣列PHP排序陣列
- PHP 陣列轉樹結構/樹結構轉陣列PHP陣列
- php 迴圈陣列引用傳值改變陣列本身的值PHP陣列
- Ajax傳遞陣列 (PHP後臺接收)陣列PHP
- php底層原理之陣列實現PHP陣列
- 詳解 PHP 陣列的底層實現:HashTablePHP陣列
- 一道遞迴陣列面試題遞迴陣列面試題
- PHP 物件轉換成陣列PHP物件陣列
- Java實現普通二維陣列和稀疏陣列的相互轉換Java陣列
- 棧實現遞迴遞迴
- lambda實現遞迴遞迴
- 資料結構之php實現陣列資料結構PHP陣列
- 面試最常問的陣列轉樹,樹轉陣列 c++ web框架paozhu實現面試陣列C++Web框架
- python中用遞迴的方法實現斐波拉契數列Python遞迴
- python-動態規劃的遞迴、非遞迴實現Python動態規劃遞迴
- [PHP] 演算法-陣列重複數字統計的PHP實現PHP演算法陣列
- 遞迴實現原則遞迴
- 簽名驗證,GO&PHP解析json不一致方案,php多維陣列遞迴排序GoPHPJSON陣列遞迴排序
- 解析arrify 轉陣列實現示例原始碼陣列原始碼
- 遞迴和非遞迴分別實現求n的階乘遞迴
- 陣列排序的實現陣列排序
- PHP中文字串轉陣列PHP字串陣列
- Android遍歷所有控制元件的遞迴和非遞迴實現Android控制元件遞迴
- 【遞迴】小q的數列遞迴
- 【遞迴打卡2】求兩個有序陣列的第K小數遞迴陣列
- php 陣列遍歷奇怪現象PHP陣列
- 歸併排序的非遞迴實現排序遞迴
- Python中Numpy實現陣列的180度反轉操作Python陣列
- C# 一維陣列如何快速實現陣列元素的資料型別的轉換?C#陣列資料型別