视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
php数组转xml的函数是什么
2020-11-02 18:26:32 责编:小采
文档


php数组转xml的函数是“arr2xml”,其使用方法:首先创建一个php示例文件;然后定义一个“arr2xml”方法;接着通过foreach语句以及“preg_replace”等函数将数组转为xml即可。

推荐:《PHP视频教程》

PHP中奖数组转为xml的需求是常见的,而且实现方法也有很多种,百度找了一下各种实现方法,但是基本是借组一些组件啥的。我就自己写了一个字符串拼组的方法,支持数组。仅供参考,不足之处敬请不吝赐教!

/**
* 将数组转换为xml
* @param array $data 要转换的数组
* @param bool $root 是否要根节点
* @return string xml字符串
* @author Dragondean
* @url http://www.cnblogs.com/dragondean*/function arr2xml($data, $root = true){ $str=""; if($root)$str .= "<xml>"; foreach($data as $key => $val){ if(is_array($val)){ $child = arr2xml($val, false); $str .= "<$key>$child</$key>";
 }else{ $str.= "<$key><![CDATA[$val]]></$key>";
 }
 } if($root)$str .= "</xml>"; return $str;
}

上面是实现的方法,第一个参数是你要转换的数组,第二个可选参数设定是否需要加<xml>根节点,默认是需要的。

测试代码:

$arr=array('a'=>'aaa','b'=>array('c'=>'1234' , 'd' => "asdfasdf"));echo arr2xml($arr);

代码执行后的结果为:

<xml><a><![CDATA[aaa]]></a><b><c><![CDATA[1234]]></c><d><![CDATA[asdfasdf]]></d></b></xml>

---------------------- ----------

更新:

在使用过程中发现下面格式的数组转换会出现问题:

array( 'item' => array( array( 'title' => 'qwe',
 'description' => 'rtrt',
 'picurl' => 'sdfsd',
 'url' => 'ghjghj'
 ), array( 'title' => 'jyutyu',
 'description' => 'werwe',
 'picurl' => 'xcvxv',
 'url' => 'ghjgh'
 )
 )
);

转换出来的结果是:

<xml>
 <item>
 <0>
 <title>
 <![CDATA[qwe]]>
 </title>
 <description>
 <![CDATA[rtrt]]>
 </description>
 <picurl>
 <![CDATA[sdfsd]]>
 </picurl>
 <url>
 <![CDATA[ghjghj]]>
 </url>
 </0>
 <1>
 <title>
 <![CDATA[jyutyu]]>
 </title>
 <description>
 <![CDATA[werwe]]>
 </description>
 <picurl>
 <![CDATA[xcvxv]]>
 </picurl>
 <url>
 <![CDATA[ghjgh]]>
 </url>
 </1>
 </item></xml>

通常情况下,上面转换出来的xml整<0><1>那层节点我们是不要的。但是在php中下标有不能同名,不能有多个item。怎么办呢?

我想了一个办法就是给item下下标,比如item[0],item[1],在转换过程中在去掉[]形式的下标,实现多个item节点并排。

函数修改后如下:

function arr2xml($data, $root = true){ $str=""; if($root)$str .= "<xml>"; foreach($data as $key => $val){ //去掉key中的下标[]
 $key = preg_replace('/[d*]/', '', $key); if(is_array($val)){ $child = arr2xml($val, false); $str .= "<$key>$child</$key>";
 }else{ $str.= "<$key><![CDATA[$val]]></$key>";
 }
 } if($root)$str .= "</xml>"; return $str;
}

那么上面需要转换的数组也需要跟着变动一下:

$arr1 =array( 'item[0]' => array( 'title' => 'qwe',
 'description' => 'rtrt',
 'picurl' => 'sdfsd',
 'url' => 'ghjghj'
 ),
 'item[1]' => array( 'title' => 'jyutyu',
 'description' => 'werwe',
 'picurl' => 'xcvxv',
 'url' => 'ghjgh'
 )
);

转换后的xml如下:

<xml>
 <item>
 <title>
 <![CDATA[qwe]]>
 </title>
 <description>
 <![CDATA[rtrt]]>
 </description>
 <picurl>
 <![CDATA[sdfsd]]>
 </picurl>
 <url>
 <![CDATA[ghjghj]]>
 </url>
 </item>
 <item>
 <title>
 <![CDATA[jyutyu]]>
 </title>
 <description>
 <![CDATA[werwe]]>
 </description>
 <picurl>
 <![CDATA[xcvxv]]>
 </picurl>
 <url>
 <![CDATA[ghjgh]]>
 </url>
 </item></xml>

下载本文
显示全文
专题