首页 > 后端开发 > php教程 > php递归解析数组生成xml问题 求帮助

php递归解析数组生成xml问题 求帮助

WBOY
发布: 2016-06-23 13:58:53
原创
1042 人浏览过

我的基本思路是遍历数组 判断当前元素有没有名为"childs"的子数组 如果有的话 递归执行本函数

$config = array(	'root' => array(		'childs' => array(			'body' => array(				'childs' => array(					'scroller' => array(						'childs' => array(							'header' => array(								'childs' => array(									'simpleHeader' => array(										'childs' => array(											'a' => array()										)									)								)							),							'items' => array(								'childs' => array(									'fuck' => array(										'childs' => array(											'b' => array()										)									)								)							)						)					)				)			)		)	));header("Content-type:text/xml;Charset=UTF-8");$xml = new XMLWriter();$xml->openUri('php://output');$xml->startDocument('1.0', 'UTF-8');$xml->setIndent(true);function writeXml($array){	global $xml;	foreach($array as $key => $value){		$xml->startElement($key);		if( isset($value['childs']) && is_array($value['childs']) && count($value['childs']) > 0 ){			writeXml($value['childs']);		}		$xml->endElement();	}	$xml->endDocument();	$xml->flush();}writeXml($config);
登录后复制

为什么生成的xml不对? items跑到了外面 如图


回复讨论(解决方案)

if 判断的逻辑问题,你再仔细看看
php SPL里面有递归器,写起来简单点


$xml->endDocument();
$xml->flush();
移出 writeXml 函数,最后执行

....writeXml($config);$xml->endDocument();$xml->flush();
登录后复制
登录后复制


$xml->endDocument();
$xml->flush();
移出 writeXml 函数,最后执行

....writeXml($config);$xml->endDocument();$xml->flush();
登录后复制
登录后复制


感激不尽 我一直以为逻辑有问题 纠结了半天 结果问题居然出在这

整体封装成函数

function writeXml($array, $xml=null){  if(! $xml) {    header("Content-type:text/xml;Charset=UTF-8");    $xml = new XMLWriter();    $xml->openUri('php://output');    $xml->startDocument('1.0', 'UTF-8');    $xml->setIndent(true);    writeXml($array, $xml);    $xml->endDocument();    $xml->flush();  }else {    foreach($array as $key => $value){        $xml->startElement($key);        if( isset($value['childs']) && is_array($value['childs']) && count($value['childs']) > 0 ){            writeXml($value['childs'], $xml);        }        $xml->endElement();    }  }}
登录后复制
调用 writeXml($config);

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板