您的位置:首页 > 编程语言 > PHP开发

php xml与数组转换问题,封装方法及字符串替换

2018-10-20 19:55 330 查看
版权声明:本文为博主原创,未经博主同意,不得转载! https://blog.csdn.net/qq_39188306/article/details/83216296
[code]/**
* [将xml转为array]
* @param  string  $xml xml字符串或者xml文件名
* @param  bool  $isFile 传入的是否是xml文件名
* @return array    转换得到的数组
*/
public static function xmlToArray($xml,$isFile=false){
//禁止引用外部xml实体
libxml_disable_entity_loader(true);
if($isFile){
if(!file_exists($xml)) return false;
$xmlStr = file_get_contents($xml);
}else{
$xmlStr = $xml;
}
$result= json_decode(json_encode(simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $result;
}

/**
* [数组转xml字符]
* @param  array $data 需要转换的数组
* @return string $xml
**/
function arrayToXml($data){
if(!is_array($data) || count($data) <= 0){
return false;
}
$xml = "<xml>";
foreach ($data as $key=>$val){
if (is_numeric($val)){
$xml.="<".$key.">".$val."</".$key.">";
}else{
$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
}
}
$xml.="</xml>";
return $xml;
}
[code]// Xml 转 一维数组
public static function xmlToData($xml, $true)
{
return (array)simplexml_load_string($xml);
}

// Xml 转 数组, 不包括根键
public static function xmlToArray($xml)
{
$arr = self::xmlToArrayRooted($xml);
$key = array_keys($arr);
return $arr[$key[0]];
}

// Xml 转 数组, 包括根键
public static function xmlToArrayRooted($xml)
{
$reg = "/<(\\w+)[^>]*?>([\\x00-\\xFF]*?)<\\/\\1>/";
if (preg_match_all($reg, $xml, $matches)) {
$count = count($matches[0]);
$arr = array();
for ($i = 0; $i < $count; $i++) {
$key = $matches[1][$i];
$val = self::xmlToArrayRooted($matches[2][$i]);  // 递归
if (array_key_exists($key, $arr)) {
if (is_array($arr[$key])) {
if (!array_key_exists(0, $arr[$key])) {
$arr[$key] = array($arr[$key]);
}
} else {
$arr[$key] = array($arr[$key]);
}
$arr[$key][] = $val;
} else {
$arr[$key] = $val;
}
}
return $arr;
} else {
return $xml;
}
}

//字符串替换
public static function strToData($str, $rule = '')
{
if (is_array($rule)) {
foreach ($rule as $key => $val) {
$str = str_replace($val, '', $str);
}
} else {
$str = str_replace($rule, '', $str);
}

return $str;
}
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: