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

WBOY
發布: 2016-06-13 11:36:53
原創
724 人瀏覽過

继续昨天的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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板