array与xml转换实现

<?php
function xml_encode( $data , $charset = 'utf-8' , $root = 'so' ) {
     $xml = '<?xml version="1.0" encoding="' . $charset . '"?>' ;
     $xml .= "<{$root}>" ;
     $xml .= array_to_xml( $data );  
     $xml .= "</{$root}>" ;
     return $xml ;
}
 
function xml_decode( $xml , $root = 'so' ) {
     $search = '/<(' . $root . ')>(.*)<\/\s*?\\1\s*?>/s' ;
     $array = array ();
     if (preg_match( $search , $xml , $matches )){
         $array = xml_to_array( $matches [2]);
     }
     return $array ;
}
 
function array_to_xml( $array ) {
     if ( is_object ( $array )){
         $array = get_object_vars( $array );
     }
     $xml = '' ;
     foreach ( $array as $key => $value ){
         $_tag = $key ;
         $_id = null;
         if ( is_numeric ( $key )){
             $_tag = 'item' ;
             $_id = ' id="' . $key . '"' ;
         }
         $xml .= "<{$_tag}{$_id}>" ;
         $xml .= ( is_array ( $value ) || is_object ( $value )) ? array_to_xml( $value ) : htmlentities( $value );
         $xml .= "</{$_tag}>" ;
     }
     return $xml ;
}
 
function xml_to_array( $xml ) {
     $search = '/<(\w+)\s*?(?:[^\/>]*)\s*(?:\/>|>(.*?)<\/\s*?\\1\s*?>)/s' ;
     $array = array ();
     if (preg_match_all( $search , $xml , $matches )){
         foreach ( $matches [1] as $i => $key ) {
             $value = $matches [2][ $i ];
             if (preg_match_all( $search , $value , $_matches )){
                 $array [ $key ] = xml_to_array( $value );
             } else {
                 if ( 'ITEM' == strtoupper ( $key )){
                     $array [] = html_entity_decode( $value );
                 } else {
                     $array [ $key ] = html_entity_decode( $value );
                 }
             }
         }
     }
     return $array ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值