问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个PHP把一维数组转化为xml格式和再从xml格式转回一维数组的方法,求示例代码。谢谢。

发布网友 发布时间:2022-05-05 03:03

我来回答

2个回答

懂视网 时间:2022-05-05 07:24

在开发中,我们经常会遇到数组与XML之间的互相转换,尤其在处理接口开发的时候经常用到,比如对方客户端POST一个XML格式的数据到服务器上,服务器上的程序要负责接收解析,还有需要将数据表数据以XML格式提供给第三方等等应用。
本文我们将简单介绍如何使用PHP处理数组和XML之间的互相转换。

PHP将数组转换成XML
PHP可以将数组转换成xml格式,简单的办法是遍历数组,然后将数组的key/value转换成xml节点,再直接echo输出了,如:

function arrayToXml($arr){ 
$xml = "<root>"; 
foreach ($arr as $key=>$val){ 
if(is_array($val)){ 
$xml.="<".$key.">".arrayToXml($val)."</".$key.">"; 
}else{ 
$xml.="<".$key.">".$val."</".$key.">"; 
} 
} 
$xml.="</root>"; 
return $xml; 
}

我测试了下,这个最简单,速度又快,支持多为数组,中文也不会乱码。
另一种方法是利用DOMDocument来生成xml结构:

function arrayToXml($arr,$dom=0,$item=0){ 
if (!$dom){ 
$dom = new DOMDocument("1.0"); 
} 
if(!$item){ 
$item = $dom->createElement("root"); 
$dom->appendChild($item); 
} 
foreach ($arr as $key=>$val){ 
$itemx = $dom->createElement(is_string($key)?$key:"item"); 
$item->appendChild($itemx); 
if (!is_array($val)){ 
$text = $dom->createTextNode($val); 
$itemx->appendChild($text); 

}else { 
arrayToXml($val,$dom,$itemx); 
} 
} 
return $dom->saveXML(); 
}

它同样可以将数组转换成xml,而且支持多维数组,生成的xml中文也不会乱码。

PHP将XML转换成数组
做接口开发的时候经常会碰到别人提交给你的是xml格式的数据,常见的微信接口、支付宝接口等,他们的接口如发送消息通信都是xml格式的,那么我们先想办法拿到这个xml数据,然后再将其转化成数组。
假设我们获取到一个这样的XML:

 <root> 

<user>

月光光abcd</user> 

<pvs>13002</pvs>

 <ips> 

<baidu_ip>1200</baidu_ip>

 <google_ip>1829</google_ip>

 </ips> 

<date>2016-06-01</date>

 </root>

通过simplexml_load_string()解析读取xml数据,然后先转成json格式,再转换成数组。

 function xmlToArray($xml){ 

 //禁止引用外部xml实体 

libxml_disable_entity_loader(true); 

$xmlstring = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); 

$val = json_decode(json_encode($xmlstring),true); 

return $val; 

}

调用xmlToArray()可得到以下结果:


得到数组后,我们就可以对数据进行各种处理了。

热心网友 时间:2022-05-05 04:32

代码

Code highlighting proced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->// Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误
function xml_to_array( $xml )
{
$reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/";
if(preg_match_all($reg, $xml, $matches))
{
$count = count($matches[0]);
$arr = array();
for($i = 0; $i < $count; $i++)
{
$key= $matches[1][$i];
$val = xml_to_array( $matches[2][$i] ); // 递归
if(array_key_exists($key, $arr))
{
if(is_array($arr[$key]))
{
if(!array_key_exists(0,$arr[$key]))
{
$arr[$key] = array($arr[$key]);
}
}else{
$arr[$key] = array($arr[$key]);
}
$arr[$key][] = $val;
}else{
$arr[$key] = $val;
}
}
return $arr;
}else{
return $xml;
}
}
// Xml 转 数组, 不包括根键
function xmltoarray( $xml )
{
$arr = xml_to_array($xml);
$key = array_keys($arr);
return $arr[$key[0]];
}追问有数组转化Xml方法吗?谢谢

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
!这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 想找个好点的语音开黑软件怎么就这么难的,大家有没有什么推荐的? 羽绒服可以水洗 win7下无法打开注册表怎么办 如何打开win7注册表 键盘没用了怎么进入Win7系统的注册表 有人背过英语牛津字典吗? 学习英语有必要背字典吗?我听说*电视台的主持人为学好英语背了一本英语字典 我英语很烂很烂,又不知道怎么学,想自学,我想知道如果我把一本英汉词典上面的单词全部背下来会不会有用 我是初中生,英语不错,现在要背词典吗? 背英语字典好吗,感觉背了会忘记 高中英语背字典有用吗 背英语字典有什么好处?我不知道别的,我就是爱背。 英语阅读理解不懂!!背词典有用吗 背字典对英语学习作用有多大 英语阅读理解差,不懂!!背词典有用吗? 快高二了,想把英语字典背了,大家觉得靠谱吗? 我想背英语字典~有用吗? 我现在大一,有打算考大四的英语专业八级考试。我现在背词典有用吗? 高中英语背词典好吗?理科 学英语被英语单词词典有用吗?里面还有词语的句子,搭配和辨析 真三国无双7if剧情是什么 游戏特色全分析 真三国无双7猛将传if是什么意思 真三国无双7lf什么意思 真三国无双7 套用if旗帜什么意思? 真三国无双7猛将传IF攻略 真三国无双7IF剧情一定要在故事模式下吗 真三国无双7猛将传if完成有什么用 手机充电插头松了怎么办小妙招 手机充电器插头松了,有什么办法吗!除了在买一个以外! 手机充电接口松了,怎么办 PHP将XML映射为HTML的代码实例 我的世界:如何召唤隐藏boss,凋零风暴! 我的世界什么是凋零风暴 怎么召唤 我的世界怎么召唤巨型凋零 凋零风暴召唤方法介绍 怎么召唤凋零风暴? 孩子正在积极入团中考报名政治面貌填什么 PHP使用DOM和simplexml读取xml文档的方法示例 四川理工技师学院几本 自贡理工大学是个几本的学校? 四川理工算几本?有哪些分校?宜宾学院又是什么类型的学校