这是从微信支付的SDK里看到的,因为微信服务器的信息传递是通过XML格式的,但是它也能为我们所用。
数组转为XML格式:
public static function arrayToXml($arr)
{
$xml = "<xml>";
foreach ($arr as $key => $val) {
if (is_numeric($val)) {
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
} else
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
}
$xml .= "</xml>";
return $xml;
}
可以将$key替换为{$key},以便于解析。
遇到多维数组的情况下,可以使用遍历来解决。eg:is_array($val)?self::arrayToXml($val):$val;
如果例如array(1,2,3);这种索引数组的情况,它的标签将会是<0>1</0><1>2</1>这种情况,但是这样是不合规格的,可以设置为<item id='0'>1</item>.方法就是
$attr = "";
if(is_numeric($key)){
$attr = "id='{$key)'";
$key = "item";
}
并且$xml .= "<{$key}{$item}>";
XML转为数组格式 (好像是仅限在微信服务器上边):
protected function xml2array($xml)
{
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
$result = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $result;
}