>  기사  >  백엔드 개발  >  继续昨天的PHP多维数组转换成XML数据格式的有关问题

继续昨天的PHP多维数组转换成XML数据格式的有关问题

WBOY
WBOY원래의
2016-06-13 11:36:53724검색

继续昨天的PHP多维数组转换成XML数据格式的问题
首先要感谢昨天的两位朋友:jordan102和xuzuning
帖子链接:http://bbs.csdn.net/topics/390609227

他们二位提供的方法测试确实可行,实在。

但是在项目的开发过程中,又发现这个项目太变态了,居然还有这样的情况

PHP数组:

$ar=array( <br />	"auth"=> array(<br />		"user"=>  "user001",<br />		"password"=> "pass001",<br />		"context"=>  "1" <br />	),<br />	"task"=> array(<br />					"code"=>"0101",<br />					"item"=>array(<br />						"title"=>"abc",<br />						"web"=>array(<br />							"name"=>"baidu.com",<br />							"ip"=>"1.2.3.4",<br />						),<br />						"web"=>array(<br />							"name"=>"sina.com",<br />							"ip"=>"1.1.1.1",<br />						),<br />						"confirm order"=>"1",<br />					),<br />					"reply_to"=>"[email&#160;protected]",<br />	),<br />);<br />


注意看里面的item节点下面,有两个web的子节点,实际上web子节点可能还有好几个,一般是在2-4个左右

现在的转换程序代码如下:
$xml = simplexml_load_string('<request />');<br />create($ar, $xml);<br />$xmlData =  $xml->saveXML();<br />echo $xmlData;<br /><br />function create($ar, $xml) {<br />	foreach($ar as $k=>$v) {<br />		if(is_array($v)) {<br />			$x = $xml->addChild($k);<br />			create($v, $x);<br />		}else $xml->addChild($k, $v);<br />	}<br />}


这段代码比较效率比较高,但是在遇到相同名称节点的时候,就过滤了只保留最后一个节点,这样最后输出的结果变成了,注意看,把web的name值为baidu.com的就漏掉了。

输出结果变成:
<?xml version="1.0"?><br /><request><br />	<auth><br />		<user>user001</user><br />		<password>pass001</password><br />		<context>1</context><br />	</auth><br />	<task><br />		<code>0101</code><br />		<item><br />			<title>abc</title><br />			<web><br />				<name>sina.com</name><br />				<ip>1.1.1.1</ip><br />			</web><br />			<confirm order>1</confirm order><br />		</item><br />		<reply_to>[email&#160;protected]</reply_to><br />	</task><br /></request><br />

那个转换的函数,我改了又改,还是一直无法输出完整的数据,头疼……

求各位前辈有什么好的方法?

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.