PHP数组Array与XML相互转换(支持多维嵌套)

//XML转数组,第一种
$arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
//XML转数组,第二种
$arr = (array)simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA);

//数组转XML
$xml = simplexml_load_string('<root />');
create($arr, $xml);
$xml = $xml->saveXML();
function create($arr, $xml) {
    foreach($arr as $k=>$v) {
        if(is_array($v)) {
	    if(array_keys($v) !== range(0, count($v)-1)) {  //关联数组
		$x = $xml->addChild($k);
		create($v, $x);
	    } else {  //索引数组
		$x = $xml->addChild($k);
		foreach ($v as $vv) {
		    $y = $x->addChild($vv['nodename']);  //要有节点名称
		    unset($vv['nodename']);
		    create($vv, $y);
	        }
	    }
        } else {
            $xml->addChild($k, $v);
        }
    }
}