ThinkPHP中的Array与XML转换实现

admin 2014年12月16日 XML和SQL学习 966次阅读 查看评论

大家都知道,流年在TP中实现了一个数组到XML格式转换的xml_encode()函数;今天正巧想使用一下,发现其非常方便,方便的同时给添加了一个xml_decode()函数,用来把数据从编码后的xml字符串中还原成PHP数组。完整的代码如下:

  1. <?php

  2. function xml_encode($data, $charset = 'utf-8', $root = 'so') {

  3.     $xml = '<?xml version="1.0" encoding="' . $charset .'"?>';

  4.     $xml .= "<{$root}>";

  5.     $xml .= array_to_xml($data);   

  6.     $xml .= "</{$root}>";

  7.     return $xml;

  8. }


  9. function xml_decode($xml, $root = 'so') {

  10.     $search = '/<(' . $root . ')>(.*)<\/\s*?\\1\s*?>/s';

  11.     $array = array();

  12.     if(preg_match($search, $xml, $matches)){

  13.         $array = xml_to_array($matches[2]);

  14.     }

  15.     return $array;

  16. }


  17. function array_to_xml($array) {

  18.     if(is_object($array)){

  19.         $array = get_object_vars($array);

  20.     }

  21.     $xml = '';

  22.     foreach($array as $key => $value){

  23.         $_tag = $key;

  24.         $_id = null;

  25.         if(is_numeric($key)){

  26.             $_tag = 'item';

  27.             $_id = ' id="' . $key . '"';

  28.         }

  29.         $xml .= "<{$_tag}{$_id}>";

  30.         $xml .= (is_array($value) || is_object($value)) ? array_to_xml($value) : htmlentities($value);

  31.         $xml .= "</{$_tag}>";

  32.     }

  33.     return $xml;

  34. }


  35. function xml_to_array($xml) {

  36.     $search = '/<(\w+)\s*?(?:[^\/>]*)\s*(?:\/>|>(.*?)<\/\s*?\\1\s*?>)/s';

  37.     $array = array ();

  38.     if(preg_match_all($search, $xml, $matches)){

  39.         foreach ($matches[1] as $i => $key) {

  40.             $value = $matches[2][$i];

  41.             if(preg_match_all($search, $value, $_matches)){

  42.                 $array[$key] = xml_to_array($value);

  43.             }else{

  44.                 if('ITEM' == strtoupper($key)){

  45.                     $array[] = html_entity_decode($value);

  46.                 }else{

  47.                     $array[$key] = html_entity_decode($value);

  48.                 }

  49.             }

  50.         }

  51.     }

  52.     return $array;

  53. }

复制代码

附加一个简单的列子:

  1. <?php

  2. $array = array(

  3.     0 => 'user',

  4.     'name' => 'spring',

  5.     'email' => 'mail@mail.com',

  6.     'address' => array(

  7.         'postcode' => 255000,

  8.         'street' => 'some where for delay!'

  9.     ),

  10.     'friend' => array(

  11.         0 => 'one',

  12.         1 => 'two',

  13.         2 => 'three',

  14.         3 => 'four'

  15.     )

  16. );


  17. $xml = xml_encode($array);


  18. $array = xml_decode($xml);


  19. print_r($array);


« 上一篇 下一篇 » admin原创文章,转载请注明出处! 标签:xmlsimplexml

相关日志:

«   2020年11月   »
1
2345678
9101112131415
16171819202122
23242526272829
30
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
文章归档
网站收藏
友情链接
图标汇集
  • 又拍云
  • 订阅ipvb的RSS 2.0聚合