欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2022-05-30 16:02:04
...
继续昨天的PHP多维数组转换成XML数据格式的问题
首先要感谢昨天的两位朋友:jordan102和xuzuning
帖子链接:http://bbs.csdn.net/topics/390609227

他们二位提供的方法测试确实可行,实在。

但是在项目的开发过程中,又发现这个项目太变态了,居然还有这样的情况

PHP数组:
$ar=array( 
"auth"=> array(
"user"=> "user001",
"password"=> "pass001",
"context"=> "1"
),
"task"=> array(
"code"=>"0101",
"item"=>array(
"title"=>"abc",
"web"=>array(
"name"=>"baidu.com",
"ip"=>"1.2.3.4",
),
"web"=>array(
"name"=>"sina.com",
"ip"=>"1.1.1.1",
),
"confirm order"=>"1",
),
"reply_to"=>"info@xxx.com",
),
);


注意看里面的item节点下面,有两个web的子节点,实际上web子节点可能还有好几个,一般是在2-4个左右

现在的转换程序代码如下:
$xml = simplexml_load_string('');
create($ar, $xml);
$xmlData = $xml->saveXML();
echo $xmlData;

function create($ar, $xml) {
foreach($ar as $k=>$v) {
if(is_array($v)) {
$x = $xml->addChild($k);
create($v, $x);
}else $xml->addChild($k, $v);
}
}


这段代码比较效率比较高,但是在遇到相同名称节点的时候,就过滤了只保留最后一个节点,这样最后输出的结果变成了,注意看,把web的name值为baidu.com的就漏掉了。

输出结果变成:



user001
pass001
1


0101

abc

sina.com
1.1.1.1

1order>

info@xxx.com



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

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

网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 继续昨天的PHP多维数组转换成XML数据格式的有关问题
  • 专题推荐

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

    认证0级讲师

    推荐视频教程
  • 继续昨天的PHP多维数组转换成XML数据格式的有关问题javascript初级视频教程
  • 继续昨天的PHP多维数组转换成XML数据格式的有关问题jquery 基础视频教程
  • 视频教程分类