php对xml的数组转化

<?php        
    $data="<xml>
    <field type='int' txt='xxx' name='username' />
    <field type='jsonarray' txt='xxx' name='friends'>
        <field type='int' txt='xxx' name='tid' />
        <field type='string' txt='xxx' name='tname' />
        <field type='jsonarray' txt='xxx' name='tcolors'>
                <field type='int' txt='xxx' name='thid' />
                <field type='string' txt='xxx' name='thname' />
                <field type='jsonarray' txt='xxx' name='apple'>
                        <field type='int' txt='xxx' name='fid' />
                        <field type='string' txt='xxx' name='fname' />
                </field>
        </field>
    </field>
    <field type='string' name='asd' />
    <field type='jsonarray' txt='xxx' name='apple1'>
            <field type='int' txt='xxx' name='fvid' />
            <field type='string' txt='xxx' name='fvname' />
    </field>
</xml>";
        
    $p=xml_parser_create();
    $xml=xml_parse_into_struct($p,$data,$vals,$index);
    xml_parser_free($p);
        
    $arr=array();
    foreach($vals as $key=>$vo){
        if(!empty($vo['attributes'])&&$vo['level']>1){
            $arr[]=$vo;
        }
    }
     $b=array();
      $levels=array();
     foreach($arr as $k=>$v)
    {
          if($v['level']==2){
              if($v['attributes']['TYPE'] != "jsonarray"){
                  $b[$v['attributes']['NAME']]=$v['attributes']['TYPE'];     
              }else{
                  $b[$v['attributes']['NAME']]=array();
                  $levels[$v['level']]=$v['attributes']['NAME'];
              }
          }else{
               $plevel=$v['level']-1;
               $i=2;              
               $s ="b['".$levels[$i]."']";
     
               while($i<$plevel) {
                   $s .="['".$levels[++$i]."']";         
               }
                           
               if($v['attributes']['TYPE'] != "jsonarray"){
                    $newkey=$v['attributes']['NAME'];
                    $newval=$v['attributes']['TYPE'];
                    eval("$".$s."['".$newkey."']='".$newval."';");             
              }else{     
                  
                  $newkey=$v['attributes']['NAME'];
                   $newval=$v['attributes']['TYPE'];
                   eval("$".$s."['".$newkey."']=array();");                  
                  $levels[$v['level']]=$newkey;                               
              }                 
          }
     }
     print_r($b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值