首页 > 后端开发 > php教程 > 继续昨天的PHP多维数组转换成XML数据格式的有关问题

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

WBOY
发布: 2016-06-13 12:36:16
原创
839 人浏览过

继续昨天的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"=>"info@xxx.com",<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>info@xxx.com</reply_to><br />
	</task><br />
</request><br />
登录后复制

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

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

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