首頁 > 後端開發 > php教程 > php递归解析数组生成xml问题 求帮助

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

WBOY
發布: 2016-06-23 13:58:53
原創
1069 人瀏覽過

我的基本思路是遍历数组 判断当前元素有没有名为"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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板