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

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

WBOY
WBOYOriginal
2016-06-13 12:36:16802browse

继续昨天的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 />

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

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn