class otherArr { private $char="UTF-8"; private $cvs_fege=","; // cvs 分割符 /**其他格式数据 转 数组 * @parem $data 要转换的数据 * @parem $format xml json cvs * @return string 如果没有数据传入返回 false * */ public function other_array($data,$format="json") { if(!is_array($data) || empty($data)) { return false; } $format=strtolower($format); switch($format) { case "xml": $data2=$this->arr_xml($data); break; case "cvs": $data2=$this->arr_cvs($data); break; default: $data2=$this->arr_json($data); break; } return $data2; } /**数组 转 其他格式数据 * @parem $data 要转换的数据 * @parem $format 原数据格式 * @return arr 如果没有数据传入返回 false * */ public function array_other($data,$format) { if(!isset($data) || !isset($format) || empty($data) || empty($format)) { return false; } $format=strtolower($format); switch($format) { case "xml": $data2=$this->xml_arr($data); break; case "cvs": $data2=$this->cvs_arr($data); break; case "json": $data2=$this->json_arr($data); break; default : return $data;// 返回原数据 } return $data2; } //------------------------------------------------------------数组转其他格式 start /** 数组 转 xml * */ private function arr_xml($data) { $xml = "<xml>"; foreach ($data as $key=>$val) { $xml.="<".$key.">".$val."</".$key.">"; } $xml.="</xml>"; return $xml; } /** 数组 转 cvs * */ private function arr_cvs($data) { $string=""; foreach ($data as $k=> $v) { $data[$k]=$this->char_conv($data[$k]); } $string .= implode($this->cvs_fege,$data)."\n"; //用英文逗号分开 return $string; } /** 数组 转 json * */ private function arr_json($data) { foreach($data as $k=>$v) { $data[$k]=$this->char_conv($data[$k]); } return json_encode($data); } //------------------------------------------------------------数组转其他格式 end //------------------------------------------------------------其他格式转数组 start /** xml 转 数组 **/ private function xml_arr($data) { //libxml_disable_entity_loader(true);禁止外部调用 return json_decode(json_encode(simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA)), true); } /** json 转 数组 **/ private function json_arr($data) { $data=$this->char_conv($data); return json_decode($data,true); } /** cvs 转 数组 **/ private function cvs_arr($data) { $data=$this->char_conv($data); $data=explode($this->cvs_fege,$data); return $data; } //------------------------------------------------------------其他格式转数组 end /** 取得当前字符编码 * @parem $str 要检验的字符 * @parem string 字符集 * */ private function get_character($str) { if(function_exists("mb_detect_encoding")) { return mb_detect_encoding($str); }else { if($this->is_gb2312($str)) { return "GB2312"; }else { return $this->char; } } } /** 判断是gbk还是utf-8 只应用于中文 * @parem $str 要检验的字符 * @return bool: true - 含GB编码 false - 为UTF-8编码 * */ private function is_gb2312($str) { for($i=0; $i<strlen($str); $i++) { $v = ord( $str[$i] ); if( $v > 127) { if( ($v >= 228) && ($v <= 233) ) { if( ($i+2) >= (strlen($str) - 1)) return true; // not enough characters $v1 = ord( $str[$i+1] ); $v2 = ord( $str[$i+2] ); if( ($v1 >= 128) && ($v1 <=191) && ($v2 >=128) && ($v2 <= 191) ) // utf编码 return false; else return true; } } } return true; } /**转换字符 * */ private function char_conv($str) { $character=$this->get_character($str); if($character==$this->char) { return $str; } if(function_exists('mb_convert_encoding')) { $str=mb_convert_encoding($str, $this->char,$character); }else if(function_exists('iconv')) { $str2=iconv($this->char, "$character.'//IGNORE'", $str); if(!empty($str2))// 如果字符不能以目标字符集表达的字符将被默默丢弃 防止字符为空 { return $str2; } } // 如果没有转换字符函数 直接返回字符 return $str; } }
调用示例:仅用于一维数组
// 调用示例 $arr = array ('a'=>'dsfsf','b'=>2,'c'=>3,'d'=>4,'e'=>5); $otherArr=new otherArr(); $f_data=$otherArr->other_array($arr,"cvs"); var_dump($f_data); $data_f=$otherArr->array_other($f_data,"cvs"); echo "<pre>"; var_dump($data_f); echo "<pre/>";