/**
* 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)
注意:结果格式手动调整一下,方便阅读!