您的位置:首页 > 编程语言 > PHP开发

ThinkPHP源码学习 xml_encode函数 数据转成xml格式

2016-08-02 14:33 351 查看
/**
* XML编码
* @param mixed $data 数据
* @param string $root 根节点名
* @param string $item 数字索引的子节点名
* @param string $attr 根节点属性
* @param string $id 数字索引子节点key转换的属性名
* @param string $encoding 数据编码
* @return string
*/
function xml_encode($data, $root='think', $item='item', $attr='', $id='id',$encoding='utf-8') {
if(is_array($attr)){
$_attr = array();
foreach ($attr as $key => $value) {
$_attr[] = "{$key}=\"{$value}\"";
}
$attr = implode(' ', $_attr);//implode — 将一个一维数组的值转化为字符串
}
$attr   = trim($attr);
$attr   = empty($attr) ? '' : " {$attr}";
$xml    = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";//  \"  表示转义双引号
$xml   .= "<{$root}{$attr}>";//$attr根节点属性
$xml   .= data_to_xml($data, $item, $id);
$xml   .= "</{$root}>";
return $xml;
}
function data_to_xml($data, $item='item', $id='id') {
$xml = $attr = '';
foreach ($data as $key => $val) {
if(is_numeric($key)){
$id && $attr = " {$id}=\"{$key}\"";
$key  = $item;
}
$xml    .=  "<{$key}{$attr}>";
$xml  .=  (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : $val;
$xml    .=  "</{$key}>";
}
return $xml;
}
$data = array(
'note'=>array(
'from'=>'liming',
'to'=>'xiaowang',
'message'=>'hello,world!'
)
);
$a=xml_encode($data);
var_dump($a);
执行结果为:

string '<?xml version="1.0" encoding="utf-8"?>
<think>
<note>
<from>liming</from>
<to>xiaowang</to>
<message>hello,world!</message>
</note>
</think>' (length=133)
注意:结果格式手动调整一下,方便阅读!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml ThinkPHP 源码学习