首先要感谢昨天的两位朋友: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('<request />');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的就漏掉了。
输出结果变成:
<?xml version="1.0"?><request> <auth> <user>user001</user> <password>pass001</password> <context>1</context> </auth> <task> <code>0101</code> <item> <title>abc</title> <web> <name>sina.com</name> <ip>1.1.1.1</ip> </web> <confirm order>1</confirm order> </item> <reply_to>info@xxx.com</reply_to> </task></request>
那个转换的函数,我改了又改,还是一直无法输出完整的数据,头疼……
求各位前辈有什么好的方法?
回复讨论(解决方案)
你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。
你那个数组是不存在的,同一维数组里面不可能出现两个一样的键名。
但是对方要求我的post过去的xml数据格式是这样的,我想不出别的办法了。
<?xml version="1.0"?><request> <auth> <user>user001</user> <password>pass001</password> <context>1</context> </auth> <task> <code>0101</code> <item> <title>abc</title> <web> <name>baidu.com</name> <ip>1.2.3.4</ip> </web> <web> <name>sina.com</name> <ip>1.1.1.1</ip> </web> <confirm order>1</confirm order> </item> <reply_to>info@xxx.com</reply_to> </task></request>
问题是入口数据是怎样?文本?json?肯定不是你显示的那个数组
现成的array2xml、json2xml类很多啊
问题是入口数据是怎样?文本?json?肯定不是你显示的那个数组
现成的array2xml、json2xml类很多啊
你说的这两个类我没用过哦,我是刚接触xml
入口数据就是xml格式的,不是json
对方是一个接口接收我post过去的xml格式数据,他们的技术文档我截图了,你看下,就是里面有两个nserver,而且这个技术文档后面,好几处也是这样写的,我觉得应该不是写错了吧
你现在的问题不是数组转换xml的问题,而是在生成那个数组的时候就已经出现了问题。
或者说php中的数组已经无法表示你最原始的数据了(至少目前你采用的这种方式无法表示)
所以请把最原始的数据贴出来,改变它的表示方式,才能解决问题。
你现在的问题不是数组转换xml的问题,而是在生成那个数组的时候就已经出现了问题。
或者说php中的数组已经无法表示你最原始的数据了(至少目前你采用的这种方式无法表示)
所以请把最原始的数据贴出来,改变它的表示方式,才能解决问题。
你说的是真的,我刚刚检查了一下,在将数据转换成xml数据之前,显示数组的各项值时,那个重复了名称的变成了一项。
不是说对方的入口,是你的入口,你的array怎么来的?不可能有相同的key
你这个xml貌似也没有那么复杂啊,不涉及中文及特殊字符的转义问题
如果你不熟悉xml,不如通过 循环拼接字符串的 方式来生成xml,或许更简单一点。
不是说对方的入口,是你的入口,你的array怎么来的?不可能有相同的key
嗯,经过各位前辈的指点,现在明白了,确实是我在创建php数组并且赋值的时候,就已经定义了相同的键值名称,导致数组有问题。
我现在找了一个比较笨的解决方法,就是先定义一个文本变量$xmltext,把对方要求发送的xml数据文本复制进去,再使用替换的文本中的几个变量,替换完了,直接post过去,不需要先定义数组,再转换成xml。
你这个xml貌似也没有那么复杂啊,不涉及中文及特殊字符的转义问题
如果你不熟悉xml,不如通过 循环拼接字符串的 方式来生成xml,或许更简单一点。
是的,我现在就是用了这种方法
不是说对方的入口,是你的入口,你的array怎么来的?不可能有相同的key
嗯,经过各位前辈的指点,现在明白了,确实是我在创建php数组并且赋值的时候,就已经定义了相同的键值名称,导致数组有问题。
我现在找了一个比较笨的解决方法,就是先定义一个文本变量$xmltext,把对方要求发送的xml数据文本复制进去,再使用替换的文本中的几个变量,替换完了,直接post过去,不需要先定义数组,再转换成xml。
这个也不算笨,其实就是php模板的做法,别忘了输出 header->text/xml

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

HTTP缓存头的关键玩家包括Cache-Control、ETag和Last-Modified。1.Cache-Control用于控制缓存策略,示例:Cache-Control:max-age=3600,public。2.ETag通过唯一标识符验证资源变化,示例:ETag:"686897696a7c876b7e"。3.Last-Modified指示资源最后修改时间,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP是一种服务器端脚本语言,用于动态网页开发和服务器端应用程序。1.PHP是一种解释型语言,无需编译,适合快速开发。2.PHP代码嵌入HTML中,易于网页开发。3.PHP处理服务器端逻辑,生成HTML输出,支持用户交互和数据处理。4.PHP可与数据库交互,处理表单提交,执行服务器端任务。

PHP在过去几十年中塑造了网络,并将继续在Web开发中扮演重要角色。1)PHP起源于1994年,因其易用性和与MySQL的无缝集成成为开发者首选。2)其核心功能包括生成动态内容和与数据库的集成,使得网站能够实时更新和个性化展示。3)PHP的广泛应用和生态系统推动了其长期影响,但也面临版本更新和安全性挑战。4)近年来的性能改进,如PHP7的发布,使其能与现代语言竞争。5)未来,PHP需应对容器化、微服务等新挑战,但其灵活性和活跃社区使其具备适应能力。

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3汉化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

禅工作室 13.0.1
功能强大的PHP集成开发环境