zoukankan      html  css  js  c++  java
  • PHP XML To Array,将XML转换为数组

    代码
    // 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]];
    }
    代码
    // 类似 XPATH 的数组选择器
    function xml_array_select( $arr, $arrpath )
    {
        
    $arrpath = trim$arrpath, '/' );
        
    if(!$arrpathreturn $arr;
        
    $self = 'xml_array_select';
        
        
    $pos = strpos$arrpath, '/' );
        
    $pos = $pos ? $pos : strlen($arrpath);
        
    $curpath = substr($arrpath, 0, $pos);
        
    $next = substr($arrpath, $pos);
        
        
    if(preg_match("/\\[(\\d+)\\]$/",$curpath,$predicate))
        {
            
    $curpath = substr($curpath, 0, strpos($curpath,"[{$predicate[1]}]"));
            
    $result = $arr[$curpath][$predicate[1]];
        }
    else $result = $arr[$curpath];
        
        
    ifis_array($arr&& !array_key_exists($curpath, $arr) )
        {
            
    die'key is not exists:' . $curpath );
        }
        
        
    return $self($result, $next);
    }
    // 如果输入的数组是全数字键,则将元素值依次传输到 $callback, 否则将自身传输给$callback
    function xml_array_each( $arr, $callback )
    {
        
    if(func_num_args()<2die('parameters error');
        
    if(!is_array($arr)) die('parameter 1 shuld be an array!');
        
    if(!is_callable($callback)) die('parameter 2 shuld be an function!');
        
    $keys = array_keys($arr);
        
    $isok = true;
        
    foreach$keys as $key ) {if(!is_int($key)) {$isok = falsebreak;}}
        
    if($isok)
            
    foreach$arr as $val ) $result[] = $callback($val);
        
    else
            
    $result[] = $callback$arr );
        
    return $result;
    }
    /**
     * 最简单的XML转数组
     * @param string $xmlstring XML字符串
     * @return array XML数组
     */
    function simplest_xml_to_array($xmlstring) {
        return json_decode(json_encode((array) simplexml_load_string($xmlstring)), true);
    }
  • 相关阅读:
    今日进度
    今日进度
    每周总结
    今日进度
    今日进度
    今日进度
    flask展示Excel
    ubuntu 相关
    python解析xml三种方法【ElementTree】【DOM】【SAX】
    Lambda实现if...elif...else【三元表达式】
  • 原文地址:https://www.cnblogs.com/heiing/p/1637015.html
Copyright © 2011-2022 走看看