继续昨天的PHP多维数组转换成XML数据格式的问题
首先要感谢昨天的两位朋友:jordan102和xuzuning
帖子链接:http://bbs.csdn.net/topics/390609227
他们二位提供的方法测试确实可行,实在。
但是在项目的开发过程中,又发现这个项目太变态了,居然还有这样的情况
PHP数组:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $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 />
|
Salin selepas log masuk
注意看里面的item节点下面,有两个web的子节点,实际上web子节点可能还有好几个,一般是在2-4个左右
现在的转换程序代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $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 />
}
|
Salin selepas log masuk
这段代码比较效率比较高,但是在遇到相同名称节点的时候,就过滤了只保留最后一个节点,这样最后输出的结果变成了,注意看,把web的name值为baidu.com的就漏掉了。
输出结果变成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?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 />
|
Salin selepas log masuk
那个转换的函数,我改了又改,还是一直无法输出完整的数据,头疼……
求各位前辈有什么好的方法?