探讨:array2xml和xml2array以及xml与array的互相转化
2015-01-24信息快讯网
本篇文章是对array2xml和xml2array以及xml与array的互相转化进行了详细的分析介绍,需要的朋友参考下
php在做后台服务器的时候,经常会遇到这种情况,需要解析来自前台的xml文件,并将数据以xml格式返回,在这种情况下,xml与php中关联数组的转化是非常频繁的事情。比如flex和其他客户端程序与服务器的交互,经常会使用这种方法。下面是我归纳的两个方法,大大简化了xml与数组相互转化的工作量。
/** * * 将简单数组转化为简单的xml * @param string $data 要进行转化的数组 * @param string $tag 要使用的标签 * @example * $arr = array( 'rtxAccount'=>'aaron','ipAddr'=>'192.168.0.12', 'conferenceList'=>array('conference'=> array( array('conferenceId'=>1212,'conferenceTitle'=>'quanshi 444','smeAccount'=>'http://www.jb51.net'), array('conferenceId'=>454,'conferenceTitle'=>'quanshi meetting','smeAccount'=>'http://www.jb51.net'), array('conferenceId'=>6767,'conferenceTitle'=>'quanshi meetting','smeAccount'=>'http://www.jb51.net'), array('conferenceId'=>232323,'conferenceTitle'=>'quanshi uuu','smeAccount'=>'http://www.jb51.net'), array('conferenceId'=>8989,'conferenceTitle'=>'quanshi meetting','smeAccount'=>'http://www.jb51.net'), array('conferenceId'=>1234343212,'conferenceTitle'=>'quanshi meetting','smeAccount'=>'http://www.jb51.net') ) ) ); 转化为: <rtxAccount>aaron</rtxAccount> <ipAddr>192.168.0.12</ipAddr> <conferenceList> <conference> <conferenceId>1212</conferenceId> <conferenceTitle>quanshi 444</conferenceTitle> <smeAccount>http://www.jb51.net</smeAccount> </conference> <conference> <conferenceId>454</conferenceId> <conferenceTitle>quanshi meetting</conferenceTitle> <smeAccount>http://www.jb51.net</smeAccount> </conference> <conference> <conferenceId>6767</conferenceId> <conferenceTitle>quanshi meetting</conferenceTitle> <smeAccount>http://www.jb51.net</smeAccount> </conference> <conference> <conferenceId>232323</conferenceId> <conferenceTitle>quanshi uuu</conferenceTitle> <smeAccount>http://www.jb51.net</smeAccount> </conference> <conference> <conferenceId>8989</conferenceId> <conferenceTitle>quanshi meetting</conferenceTitle> <smeAccount>http://www.jb51.net</smeAccount> </conference> <conference> <conferenceId>1234343212</conferenceId> <conferenceTitle>quanshi meetting</conferenceTitle> <smeAccount>http://www.jb51.net</smeAccount> </conference> </conferenceList> */ function array2xml($data,$tag = '') { $xml = ''; foreach($data as $key => $value) { if(is_numeric($key)) { if(is_array($value)) { $xml .= "<$tag>"; $xml .= array2xml($value); $xml .="</$tag>"; } else { $xml .= "<$tag>$value</$tag>"; } } else { if(is_array($value)) { $keys = array_keys($value); if(is_numeric($keys[0])) { $xml .=array2xml($value,$key); } else { $xml .= "<$key>"; $xml .=array2xml($value); $xml .= "</$key>"; } } else { $xml .= "<$key>$value</$key>"; } } } return $xml; } }
xml2array
/** * * 将简单的xml转化成关联数组 * @param string $xmlString xml字符串 * @example * <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RTXConferenceReqDTO> <conferenceTitle>IT交流会</conferenceTitle> <startTime>2011-12-19 12:00:00</startTime> <rtxAccount>andy1111111</rtxAccount> <ipAddr>192.168.1.56</ipAddr> <duration>120</duration> <conferenceType>1</conferenceType> <invitees> <invitee> <rtxAccount>被邀请人1的RTX账号</rtxAccount> <tel>被邀请人1电话号码</tel> </invitee> <invitee> <rtxAccount>被邀请人2的RTX账号</rtxAccount> <tel>被邀请人2电话号码</tel> </invitee> </invitees> </RTXConferenceReqDTO> 转化之后的关联数组: Array ( [conferenceTitle] => IT交流会 [startTime] => 2011-12-19 12:00:00 [rtxAccount] => andy1111111 [ipAddr] => 192.168.1.56 [duration] => 120 [conferenceType] => 1 [invitees] => Array ( [invitee] => Array ( [0] => Array ( [rtxAccount] => 被邀请人1的RTX账号 [tel] => 被邀请人1电话号码 ) [1] => Array ( [rtxAccount] => 被邀请人2的RTX账号 [tel] => 被邀请人2电话号码 ) ) ) ) */ function xml2array($xmlString = '') { $targetArray = array(); $xmlObject = simplexml_load_string($xmlString); $mixArray = (array)$xmlObject; foreach($mixArray as $key => $value) { if(is_string($value)) { $targetArray[$key] = $value; } if(is_object($value)) { $targetArray[$key] = xml2array($value->asXML()); } if(is_array($value)) { foreach($value as $zkey => $zvalue) { if(is_numeric($zkey)) { $targetArray[$key][] = xml2array($zvalue->asXML()); } if(is_string($zkey)) { $targetArray[$key][$zkey] = xml2array($zvalue->asXML()); } } } } return $targetArray; }
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
smarty获得当前url的方法分享
smarty模板中拼接字符串的方法
php中simplexml_load_string使用实例分享
分享下页面关键字抓取components.arrow.com站点代码
php缓冲 output_buffering和ob_start使用介绍
php中自定义函数dump查看数组信息类似var_dump
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
php二维数组排序方法(array_multisort usort)
zend framework文件上传功能实例代码
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
PHP PDOStatement:bindParam插入数据错误问题分析
PHP将XML转数组过程详解
PHP生成sitemap.xml地图函数
遭遇php的in_array低性能问题
php5.5新数组函数array_column使用
解析array splice的移除数组中指定键的值,返回一个新的数组
解析在PHP中使用全局变量的几种方法
解析Ubuntu下crontab命令的用法
解析argc argv在php中的应用
解析func_num_args与func_get_args函数的使用
深入php中var_dump方法的使用详解
解析PHP中ob_start()函数的用法
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
php 备份数据库代码(生成word,excel,json,xml,sql)
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
解析php中array_merge与array+array的区别
PHP array_multisort() 函数的深入解析
使用array mutisort 实现按某字段对数据排序
Yii PHP Framework实用入门教程(详细介绍)
深入array multisort排序原理的详解
深入理解:XML与对象的序列化与反序列化
探讨:使用XMLSerialize 序列化与反序列化
探讨如何使用SimpleXML函数来加载和解析XML文档
php之XML转数组函数的详解