您的位置:首页 > 编程语言 > PHP开发

php对xml的数组转化

2015-04-10 17:50 567 查看
<?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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php