ThinkPHP XML格式转换成数组
XML格式转换成数组 用递归操作很简单,大家可以下载附件测试// Xml 转 数组, 包括根键,忽略空元素和属性,尚有重大错误<br>
public function xml_to_array( $xml )<br>
{<br>
$reg = "/]*?>([\\x00-\\xFF]*?)/";<br>
if(preg_match_all($reg, $xml, $matches))<br>
{<br>
$count = count($matches[0]);<br>
$arr = array();<br>
for($i = 0; $i
{<br>
$key = $matches[1][$i];<br>
$val = $this->xml_to_array( $matches[2][$i] ); // 递归<br>
if(array_key_exists($key, $arr))<br>
{<br>
if(is_array($arr[$key]))<br>
{<br>
if(!array_key_exists(0,$arr[$key])) <br>
{<br>
$arr[$key] = array($arr[$key]);<br>
}<br>
}else{<br>
$arr[$key] = array($arr[$key]);<br>
}<br>
$arr[$key][] = $val;<br>
}else{<br>
$arr[$key] = $val;<br>
}<br>
}<br>
return $arr;<br>
}else{<br>
return $xml;<br>
}<br>
}<br>
<br>
<br>
// Xml 转 数组, 不包括根键<br>
public function xmltoarray( $xml )<br>
{<br>
<br>
$arr = $this->xml_to_array($xml);<br>
$key = array_keys($arr);<br>
return $arr[$key[0]];<br>
}
第二种方法,预防递归溢出class XML<br>
{<br>
<br>
public $parser = NULL;<br>
public $document = NULL;<br>
public $parent = NULL;<br>
public $stack = NULL;<br>
public $last_opened_tag = NULL;<br>
<br>
public function XML( )<br>
{<br>
$this->parser = xml_parser_create( );<br>
xml_parser_set_option( $this->parser, XML_OPTION_CASE_FOLDING, false );<br>
xml_set_object( $this->parser, $this );<br>
xml_set_element_handler( $this->parser, "open", "close" );<br>
xml_set_character_data_handler( $this->parser, "data" );<br>
}<br>
<br>
public function destruct( )<br>
{<br>
xml_parser_free( $this->parser );<br>
}<br>
<br>
public function &parse( &$data )<br>
{<br>
$this->document = array( );<br>
$this->stack = array( );<br>
$this->parent =& $this->document;<br>
$parsedata = xml_parse( $this->parser, $data, true ) ? $this->document : NULL;<br>
return $parsedata;<br>
}<br>
<br>
public function open( &$parser, $tag, $attributes )<br>
{<br>
$this->data = "";<br>
$this->last_opened_tag = $tag;<br>
if ( is_array( $this->parent ) && array_key_exists( $tag, $this->parent ) )<br>
{<br>
if ( is_array( $this->parent[$tag] ) && array_key_exists( 0, $this->parent[$tag] ) )<br>
{<br>
$key = count_numeric_items( $this->parent[$tag] );<br>
}<br>
else<br>
{<br>
if ( array_key_exists( "{$tag} attr", $this->parent ) )<br>
{<br>
$arr = array(<br>
"0 attr" => $this->parent["{$tag} attr"],<br>
$this->parent[$tag]<br>
);<br>
unset( $this->parent["{$tag} attr"] );<br>
}<br>
else<br>
{<br>
$arr = array(<br>
$this->parent[$tag]<br>
);<br>
}<br>
$this->parent[$tag] =& $arr;<br>
$key = 1;<br>
}<br>
$this->parent =& $this->parent[$tag];<br>
}<br>
else<br>
{<br>
$key = $tag;<br>
}<br>
if ( $attributes )<br>
{<br>
$this->parent["{$key} attr"] = $attributes;<br>
}<br>
$this->parent =& $this->parent[$key];<br>
$this->stack[] =& $this->parent;<br>
}<br>
<br>
public function data( &$parser, $data )<br>
{<br>
if ( $this->last_opened_tag != NULL )<br>
{<br>
$this->data .= $data;<br>
}<br>
}<br>
<br>
public function close( &$parser, $tag )<br>
{<br>
if ( $this->last_opened_tag == $tag )<br>
{<br>
$this->parent = $this->data;<br>
$this->last_opened_tag = NULL;<br>
}<br>
array_pop( $this->stack );<br>
if ( $this->stack )<br>
{<br>
$this->parent =& $this->stack[count( $this->stack ) - 1];<br>
}<br>
}<br>
<br>
}<br>
<br>
function &XML_unserialize( &$xml )<br>
{<br>
$xml_parser = new XML( );<br>
$data =& $xml_parser->parse( $xml );<br>
$xml_parser->destruct( );<br>
return $data;<br>
}<br>
<br>
function &XML_serialize( &$data, $level = 0, $prior_key = NULL )<br>
{<br>
if ( $level == 0 )<br>
{<br>
ob_start( );<br>
echo "<?xml version=\"1.0\" ?>";<br>
echo "\n";<br>
}<br>
while ( list( $key, $value ) = each( $data ) )<br>
{<br>
if ( !strpos( $key, " attr" ) )<br>
{<br>
if ( is_array( $value ) && array_key_exists( 0, $value ) )<br>
{<br>
xml_serialize( $value, $level, $key );<br>
}<br>
else<br>
{<br>
$tag = $prior_key ? $prior_key : $key;<br>
echo str_repeat( "\t", $level );<br>
echo "
echo $tag;<br>
if ( array_key_exists( "{$key} attr", $data ) )<br>
{<br>
while ( list( $attr_name, $attr_value ) = each( $data["{$key} attr"] ) )<br>
{<br>
echo " ";<br>
echo $attr_name;<br>
echo "=\"";<br>
echo htmlspecialchars( $attr_value );<br>
echo "\"";<br>
}<br>
reset( $data["{$key} attr"] );<br>
}<br>
if ( is_null( $value ) )<br>
{<br>
echo " />\n";<br>
}<br>
else if ( !is_array( $value ) )<br>
{<br>
echo ">";<br>
echo htmlspecialchars( $value );<br>
echo "{$tag}>\n";<br>
}<br>
else<br>
{<br>
echo ">\n";<br>
echo xml_serialize( $value, $level + 1 );<br>
echo str_repeat( "\t", $level );<br>
echo "{$tag}>\n";<br>
}<br>
}<br>
}<br>
}<br>
reset( $data );<br>
if ( $level == 0 )<br>
{<br>
$str =& ob_get_contents( );<br>
ob_end_clean( );<br>
return $str;<br>
}<br>
}<br>
<br>
function count_numeric_items( &$array )<br>
{<br>
return is_array( $array ) ? count( array_filter( array_keys( $array ), "is_numeric" ) ) : 0;<br>
}
IndexModel.class.zip
( 705 B 下载:101 次 )
AD:真正免费,域名+虚机+企业邮箱=0元

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

了解Python编程的入门级代码示例Python是一种简单易学,功能强大的编程语言。对于初学者来说,了解Python编程的入门级代码示例是非常重要的。本文将为您提供一些具体的代码示例,帮助您快速入门。打印HelloWorldprint("HelloWorld")这是Python中最简单的代码示例。print()函数用于将指定的内容输出

PHP变量存储程序运行期间的值,对于构建动态且交互式的WEB应用程序至关重要。本文将深入探讨php变量,并通过10个真实的示例展示它们的实际应用。1.存储用户输入$username=$_POST["username"];$passWord=$_POST["password"];此示例从表单提交中提取用户名和密码,并将其存储在变量中以供进一步处理。2.设置配置值$database_host="localhost";$database_username="username";$database_pa

标题:从入门到精通:Go语言中常用数据结构的代码实现数据结构在编程中起着至关重要的作用,它是程序设计的基础。在Go语言中,有许多常用的数据结构,掌握这些数据结构的实现方式对于成为一名优秀的程序员至关重要。本文将介绍Go语言中常用的数据结构,并给出相应的代码示例,帮助读者从入门到精通这些数据结构。1.数组(Array)数组是一种基本的数据结构,是一组相同类型

《Go语言编程实例:Web开发中的代码示例》随着互联网的快速发展,Web开发已经成为各行业中必不可少的一部分。作为一门功能强大且性能优越的编程语言,Go语言在Web开发中越来越受到开发者们的青睐。本文将通过具体的代码示例,介绍如何利用Go语言进行Web开发,让读者能够更好地理解和运用Go语言来构建自己的Web应用。1.简单的HTTP服务器首先,让我们从一个

Java冒泡排序最简单的代码示例冒泡排序是一种常见的排序算法,它的基本思想是通过相邻元素的比较和交换来将待排序序列逐步调整为有序序列。下面是一个简单的Java代码示例,演示了如何实现冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

如何使用PHP编写库存管理系统中的库存分仓管理功能代码库存管理是许多企业中不可或缺的一部分。对于拥有多个仓库的企业来说,库存分仓管理功能尤为重要。通过合理管理和跟踪库存,企业可以实现不同仓库之间的库存调拨,优化运营成本,改善协同效率。本文将介绍如何使用PHP编写库存分仓管理功能的代码,并为您提供相关的代码示例。一、建立数据库在开始编写库存分仓管理功能的代码之

Java选择排序法代码编写指南及示例选择排序是一种简单直观的排序算法,其思想是每次从未排序的元素中选择最小(或最大)的元素进行交换,直到所有元素排序完成。本文将提供选择排序的代码编写指南,并附上具体的Java示例代码。算法原理选择排序的基本原理是将待排序数组分为已排序和未排序两部分,每次从未排序部分选择最小(或最大)的元素,将其放到已排序部分的末尾。重复上述

华为云边缘计算对接指南:Java代码示例快速实现接口随着物联网技术的快速发展和边缘计算的兴起,越来越多的企业开始关注边缘计算的应用。华为云提供了边缘计算服务,为企业提供了高可靠的计算资源和便捷的开发环境,使得边缘计算应用更加容易实现。本文将介绍如何通过Java代码快速实现华为云边缘计算的接口。首先,我们需要准备好开发环境。确保你已经安装了Java开发工具包(
