/** *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; }
本文介绍了一个将XML字符串转换为数组的PHP函数。该函数利用正则表达式和simplexml_load_string方法,递归地解析XML结构,适用于需要将XML数据转换为易于操作的数据结构的场景。
973

被折叠的 条评论
为什么被折叠?



