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

WBOY
发布: 2016-06-13 11:36:53
原创
723 人浏览过

继续昨天的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 />
登录后复制

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

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

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