> 백엔드 개발 > 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿