php xml 转array 函数 (原创)
/** *Author zhudongchang *Date 2015/6/12 原创 *xml 转array 函数 *@param string $xmlStr xml字符串 *@return string */ public static function convertXmlToArray($xmlStr){ $patten=<<<EOT /(^\s*<(\s*[a-zA-Z0-9_='":]+\s*)+>.*<\s*\/(\s*[a-zA-Z0-9_='":]+\s*)+>\s*$)|(^\s*<(\s*[a-zA-Z0-9_='":]+\s*)+\/\s*>$)/s EOT; $pattenChildXml=<<<EOT /^\s*<(\s*[a-zA-Z0-9_='":]+\s*)+>(.*)<\s*\/(\s*[a-zA-Z0-9_='":]+\s*)+>\s*$/s EOT; $res=array(); $xml = simplexml_load_string($xmlStr); foreach($xml->children() as $val){ $key=$val->getName(); $valXml=$val->asXML(); preg_match($pattenChildXml,$valXml,$match); $childXmlStr=$match[2]; //var_dump($match,$valXml,$childXmlStr);die(); $temp=preg_match($patten,$childXmlStr)?self::convertXmlToArray($valXml):(string)$val; if(array_key_exists($key,$res)){ is_array($res[$key]) or $res[$key]=array($res[$key]); $tempNew=array(); foreach($res[$key] as $k =>$v){ if(!is_int($k)){ $tempNew[]=$v; unset($res[$key][$k]); } } empty($tempNew) or $res[$key][]=$tempNew; $res[$key][]=$temp; }else{ $res[$key]=$temp; } } return $res; }