Maison  >  Article  >  développement back-end  >  继续昨天的PHP多维数组转换成XML数据格式的有关问题

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

WBOY
WBOYoriginal
2016-06-13 12:36:16805parcourir

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

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

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

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn