<?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);
$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);