Heim > Backend-Entwicklung > PHP-Tutorial > 继续昨天的PHP多维数组转换成XML数据格式的有关问题

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

WBOY
Freigeben: 2016-06-13 12:36:16
Original
838 Leute haben es durchsucht

继续昨天的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 />
Nach dem Login kopieren


注意看里面的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 />
}
Nach dem Login kopieren


这段代码比较效率比较高,但是在遇到相同名称节点的时候,就过滤了只保留最后一个节点,这样最后输出的结果变成了,注意看,把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 />
Nach dem Login kopieren

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

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage