文章目录

php xml to array(xml转数组)

前面小编分享了一篇文章《php天气预报接口》,里面抓取的内容是xml,需要将xml转换成数组。

所以今天小编就分享使用php如何将xml to array的方法。

php代码$str='<?xml version="1.0" encoding="UTF-8"?><resp><city>北京</city><updatetime>10:18</updatetime><wendu>6</wendu><fengli><![CDATA[5级]]></fengli><shidu>21%</shidu><fengxiang>北风</fengxiang></resp>';
  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<$m; $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转数组)这篇文章对小伙伴有帮助,请多多支持三体教程,当然你有什么原创文章也可以分享到这里来哦!

本文网址:http://www.santii.com/article/168.html


数据更新时间:2018-09-22