php數組轉xml的遞迴實現,php數組xml遞迴_PHP教程

來源:互聯網
上載者:User

php數組轉xml的遞迴實現,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 .= "";    foreach($data as $key => $val){        if(is_array($val)){            $child = arr2xml($val, false);            $str .= "<$key>$child$key>";        }else{            $str.= "<$key><span>$val</span>$key>";        }    }    if($root)$str .= "";    return $str;}

上面是實現的方法,第一個參數是你要轉換的數組,第二個選擇性參數設定是否需要加根節點,預設是需要的。

測試代碼:

$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>                </span><span>qwe</span><span>            title>            <description>                </span><span>rtrt</span><span>            description>            <picurl>                </span><span>sdfsd</span><span>            picurl>            <url>                </span><span>ghjghj</span><span>            url>        0>        <1>            <title>                </span><span>jyutyu</span><span>            title>            <description>                </span><span>werwe</span><span>            description>            <picurl>                </span><span>xcvxv</span><span>            picurl>            <url>                </span><span>ghjgh</span><span>            url>        1>    item>xml>

通常情況下,上面轉換出來的xml整<0><1>那層節點我們是不要的。但是在php中下標有不能同名,不能有多個item。怎麼辦呢?

我想了一個辦法就是給item下下標,比如item[0],item[1],在轉換過程中在去掉[]形式的下標,實現多個item節點並排。

函數修改後如下:

function arr2xml($data, $root = true){    $str="";    if($root)$str .= "";    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><span>$val</span>$key>";        }    }    if($root)$str .= "";    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>            </span><span>qwe</span><span>        title>        <description>            </span><span>rtrt</span><span>        description>        <picurl>            </span><span>sdfsd</span><span>        picurl>        <url>            </span><span>ghjghj</span><span>        url>    item>    <item>        <title>            </span><span>jyutyu</span><span>        title>        <description>            </span><span>werwe</span><span>        description>        <picurl>            </span><span>xcvxv</span><span>        picurl>        <url>            </span><span>ghjgh</span><span>        url>    item>xml>

http://www.bkjia.com/PHPjc/1001463.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1001463.htmlTechArticlephp數組轉xml的遞迴實現,php數組xml遞迴 PHP中獎數組轉為xml的需求是常見的,而且實現方法也有很多種,百度找了一下各種實現方法,但是基...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.