php xml to array(xml转数组)2017-12-03 21:24
前面小编分享了一篇文章《php天气预报接口》,里面抓取的内容是xml,需要将xml转换成数组。
所以今天小编就分享使用php如何将xml to array的方法。 php代码$str='<?xml version="1.0" encoding="UTF-8"?>北京10:18621%北风';
function xmlstr_to_array($xmlstr) {
$doc = new DOMDocument();
$doc->loadXML($xmlstr);
$root = $doc->documentElement;
$output = domnode_to_array($root);
$output['@root'] = $root->tagName;
return $output;
}
function domnode_to_array($node) {
$output = array();
switch ($node->nodeType) {
case XML_CDATA_SECTION_NODE:
case XML_TEXT_NODE:
$output = trim($node->textContent);
break;
case XML_ELEMENT_NODE:
for ($i=0, $m=$node->childNodes->length; $i
$child = $node->childNodes->item($i);
$v = domnode_to_array($child);
if(isset($child->tagName)) {
$t = $child->tagName;
if(!isset($output[$t])) {
$output[$t] = array();
}
$output[$t][] = $v;
}
elseif($v || $v === '0') {
$output = (string) $v;
}
}
if($node->attributes->length && !is_array($output)) { //Has attributes but isn't an array
$output = array('@content'=>$output); //Change output into an array.
}
if(is_array($output)) {
if($node->attributes->length) {
$a = array();
foreach($node->attributes as $attrName => $attrNode) {
$a[$attrName] = (string) $attrNode->value;
}
$output['@attributes'] = $a;
}
foreach ($output as $t => $v) {
if(is_array($v) && count($v)==1 && $t!='@attributes') {
$output[$t] = $v[0];
}
}
}
break;
}
return $output;
}
print_r(xmlstr_to_array($str)); 运行代码,我们将得到如下结果
Array
(
[city] => 北京
[updatetime] => 10:18
[wendu] => 6
[fengli] => 5级
[shidu] => 21%
[fengxiang] => 北风
[@root] => resp
)
希望php xml to array(xml转数组)这篇文章对小伙伴有帮助,请多多支持三体教程,当然你有什么原创文章也可以分享到这里来哦!