1. // Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误
  2. function xml_to_array( $xml )
  3. {
  4. $reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/";
  5. if(preg_match_all($reg, $xml, $matches))
  6. {
  7. $count = count($matches[0]);
  8. $arr = array();
  9. for($i = 0; $i < $count; $i++)
  10. {
  11. $key= $matches[1][$i];
  12. $val = xml_to_array( $matches[2][$i] ); // 递归
  13. if(array_key_exists($key, $arr))
  14. {
  15. if(is_array($arr[$key]))
  16. {
  17. if(!array_key_exists(0,$arr[$key]))
  18. {
  19. $arr[$key] = array($arr[$key]);
  20. }
  21. }else{
  22. $arr[$key] = array($arr[$key]);
  23. }
  24. $arr[$key][] = $val;
  25. }else{
  26. $arr[$key] = $val;
  27. }
  28. }
  29. return $arr;
  30. }else{
  31. return $xml;
  32. }
  33. }
  34. // Xml 转 数组, 不包括根键
  35. function xmltoarray( $xml )
  36. {
  37. $arr = xml_to_array($xml);
  38. $key = array_keys($arr);
  39. return $arr[$key[0]];
  40. }
  1. // 类似 XPATH 的数组选择器
  2. function xml_array_select( $arr, $arrpath )
  3. {
  4. $arrpath = trim( $arrpath, '/' );
  5. if(!$arrpath) return $arr;
  6. $self = 'xml_array_select';
  7.  
  8. $pos = strpos( $arrpath, '/' );
  9. $pos = $pos ? $pos : strlen($arrpath);
  10. $curpath = substr($arrpath, 0, $pos);
  11. $next = substr($arrpath, $pos);
  12.  
  13. if(preg_match("/\\[(\\d+)\\]$/",$curpath,$predicate))
  14. {
  15. $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]"));
  16. $result = $arr[$curpath][$predicate[1]];
  17. }else $result = $arr[$curpath];
  18.  
  19. if( is_array($arr) && !array_key_exists($curpath, $arr) )
  20. {
  21. die( 'key is not exists:' . $curpath );
  22. }
  23.  
  24. return $self($result, $next);
  25. }
  26. // 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback
  27. function xml_array_each( $arr, $callback )
  28. {
  29. if(func_num_args()<2) die('parameters error');
  30. if(!is_array($arr)) die('parameter 1 shuld be an array!');
  31. if(!is_callable($callback)) die('parameter 2 shuld be an function!');
  32. $keys = array_keys($arr);
  33. $isok = true;
  34. foreach( $keys as $key ) {if(!is_int($key)) {$isok = false; break;}}
  35. if($isok)
  36. foreach( $arr as $val ) $result[] = $callback($val);
  37. else
  38. $result[] = $callback( $arr );
  39. return $result;
  40. }
  1. /**
  2. * 最简单的XML转数组
  3. * @param string $xmlstring XML字符串
  4. * @return array XML数组
  5. */
  6. function simplest_xml_to_array($xmlstring) {
  7. return json_decode(json_encode((array) simplexml_load_string($xmlstring)), true);
  8. }

PHP XML To Array将XML转换为数组的更多相关文章

  1. 将xml转为array 输出xml字符

    //将xml转为array private function fromXml($xml){ // 禁止引用外部xml实体 libxml_disable_entity_loader(true); ret ...

  2. 一个简单xml数据转换为数组的方法

    本人用easywechat做微信回复图文,从数据库中拿到的数据直接是xml拼好的数据,但是框架只有自带的获取xml格式的语句,所有需要将xml数据中所需要的数据拿出来用来拼接. 搜了好多资料说的都很麻 ...

  3. php xml转数组,数组转xml,array转xml,xml转array

    //数组转XML function arrayToXml($arr) { $xml = "<xml>"; foreach ($arr as $key=>$val) ...

  4. 微信开发所需要的的方法(签名认证、数组转字符串方法、将xml字符串转换为数组、发送xml请求方法)

    //将xml字符串转换为数组 public function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_loa ...

  5. PHP将XML数据转换为数组

    <?php $s=join(,file('httpapi.elong.comxmlv2.0hotelcn0132701501.xml')); $result = xml_to_array($s) ...

  6. php xml格式对象 返回->对应格式数组

    /*     * $objXml xml格式对象      * 返回 : 对应格式数组     */    public function XmlString2Arr($xml)    {       ...

  7. PHP:微信小程序调用【统一下单】【微信支付】【支付回调】API;XML转Array,Array转XML方法(通用)

    1.微信公众号.微信小程序开发过程中,第三方服务器与微信服务器数据交互,需要进行数据转换,必须用到这两个函数: 分别是xml_to_array.array_to_xml ; /** * 输出xml字符 ...

  8. php xml转array的方法

    php xml转array的方法 <pre><?php $responseXml='<xml><appid>12</appid></xml& ...

  9. xml格式的数据转化成数组

    将得到的xml格式的数据转化成数组 <?php //构造xml $url = "http://api.map.baidu.com/telematics/v3/weather?locat ...

随机推荐

  1. ZBrush中标准笔刷介绍

    ZBrush最实用.精彩的部分便是雕刻了,笔刷又有时雕刻时必不可少的工具,ZBrush中给我们提供了很多种笔刷,那么,最基础.最常用的笔刷是什么呢,本文内容向大家介绍ZBrush®中标准笔刷以便大家熟 ...

  2. 安装idea

    1.下载idea https://www.jetbrains.com/idea/download/#section=linux 2.解压 sudo tar -zxvf  ideaIC-2018.3.2 ...

  3. Lapack下载安装

    安装 1.下载压缩文件 wget http://www.netlib.org/lapack/lapack-3.8.0.tar.gz 2.解压缩 tar -zxvf lapack-3.8.0.tar.g ...

  4. 小学生都能学会的python(生成器)

    小学生都能学会的python(生成器) 1. 生成器 生成器的本质就是迭代器. 生成器由生成器函数来创建或者通过生成器表达式来创建 # def func(): # lst = [] # for i i ...

  5. git与github的连接流程

    https://blog.csdn.net/sssssuuuuu666/article/details/78565381 https://www.cnblogs.com/wzd5230/p/49064 ...

  6. React 中的 AJAX 请求:获取数据的方法

    React 中的 AJAX 请求:获取数据的方法 React 只是使用 props 和 state 两处的数据进行组件渲染. 因此,想要使用来自服务端的数据,必须将数据放入组件的 props 或 st ...

  7. C#-C#6.0新特性

    来自为知笔记(Wiz)

  8. AJAX核心--XMLHttpRequest五步法

    引言: AJAX=异步Javascript + XML,AJAX是一种用于创建高速动态网页的技术. 开门见山: 解读:AJAX使用XHTML和CSS为网页表示.DOM动态显示和交互,XML进行数据交换 ...

  9. HDU 5187 zhx&#39;s contest(防爆__int64 )

    Problem Description As one of the most powerful brushes, zhx is required to give his juniors n probl ...

  10. USACO runaround

    /* ID:kevin_s1 PROG:runround LANG:C++ */ #include <iostream> #include <cstdio> #include ...