- 浏览: 6939 次
- 性别:
- 来自: 常熟
-
最新评论
收藏列表
- 全部 [32]
- md5 [1]
- javascript [17]
- eclipse [1]
- jquery [2]
- linux [1]
- sql [2]
- php [9]
- css [1]
- 导出 [1]
- excel [1]
- flash [1]
- 排序 [1]
- trim [1]
- base64 [1]
- swf [1]
- word [1]
- 前端技术 [4]
- 推送 [1]
- fullcalendar [1]
- 滑动效果 [1]
- 字符串大写首字母 [1]
- 常用js方法 [2]
- 验证格式 [1]
标题 | 标签 | 来源 | |
php实现排序算法 | php, 排序 | php四种基础算法:冒泡,选择,插入和快速排序法 | |
//1. 冒泡排序法 $arr=array(1,43,54,62,21,66,32,78,36,76,39); function getpao($arr) { $len=count($arr); //设置一个空数组 用来接收冒出来的泡 //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for($k=0;$k<$len-$i;$k++) { if($arr[$k]>$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } } } return $arr; } //1,43,54,21,62,32,66,36,76,39,78 //1,43,21,54,32,62,36,66,39,76,78 //1,21,43,32,54,36,62,39,66,76,78 //1,21,32,43,36,54,39,62,66,76,78 //1,21,32,36,43,39,54,62,66,76,78 //1,21,32,36,39,43,54,62,66,76,78 //虽然接下去的结果相同,但是还是得再执行4次 //2. 选择排序法 function select_sort($arr) { //实现思路 双重循环完成,外层控制轮数,当前的最小值。内层 控制的比较次数 //$i 当前最小值的位置, 需要参与比较的元素 for($i=0, $len=count($arr); $i<$len-1; $i++) { //先假设最小的值的位置 $p = $i; //$j 当前都需要和哪些元素比较,$i 后边的。 for($j=$i+1; $j<$len; $j++) { //$arr[$p] 是 当前已知的最小值 if($arr[$p] > $arr[$j]) { //比较,发现更小的,记录下最小值的位置;并且在下次比较时, // 应该采用已知的最小值进行比较。 $p = $j; } } //已经确定了当前的最小值的位置,保存到$p中。 //如果发现 最小值的位置与当前假设的位置$i不同,则位置互换即可 if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } //返回最终结果 return $arr; } //3.插入排序法 function insert_sort($arr) { //区分 哪部分是已经排序好的 //哪部分是没有排序的 //找到其中一个需要排序的元素 //这个元素 就是从第二个元素开始,到最后一个元素都是这个需要排序的元素 //利用循环就可以标志出来 //i循环控制 每次需要插入的元素,一旦需要插入的元素控制好了, //间接已经将数组分成了2部分,下标小于当前的(左边的),是排序好的序列 for($i=1, $len=count($arr); $i<$len; $i++) { //获得当前需要比较的元素值。 $tmp = $arr[$i]; //内层循环控制 比较 并 插入 for($j=$i-1;$j>=0;$j--) { //$arr[$i];//需要插入的元素; $arr[$j];//需要比较的元素 if($tmp < $arr[$j]) { //发现插入的元素要小,交换位置 //将后边的元素与前面的元素互换 $arr[$j+1] = $arr[$j]; //将前面的数设置为 当前需要交换的数 $arr[$j] = $tmp; } else { //如果碰到不需要移动的元素 //由于是已经排序好是数组,则前面的就不需要再次比较了。 break; } } } //将这个元素 插入到已经排序好的序列内。 //返回 return $arr; } //4.快速排序法 function quick_sort($arr) { //先判断是否需要继续进行 $length = count($arr); if($length <= 1) { return $arr; } //如果没有返回,说明数组内的元素个数 多余1个,需要排序 //选择一个标尺 //选择第一个元素 $base_num = $arr[0]; //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内 //初始化两个数组 $left_array = array();//小于标尺的 $right_array = array();//大于标尺的 for($i=1; $i<$length; $i++) { if($base_num > $arr[$i]) { //放入左边数组 $left_array[] = $arr[$i]; } else { //放入右边 $right_array[] = $arr[$i]; } } //再分别对 左边 和 右边的数组进行相同的排序处理方式 //递归调用这个函数,并记录结果 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并左边 标尺 右边 return array_merge($left_array, array($base_num), $right_array); } //5实现多维数组排序 function _handle_ranking_list($ranklist, $options=array()){ if(!empty($ranklist) && !empty($options)){ foreach ($ranklist as $key => $value) { foreach($options as $option){ $tmp[$option['key']][$key] = $value[$option['key']]; } } $str = 'array_multisort('; foreach ($options as $option){ $str .= '$tmp["'.$option['key'].'"], '.$option['order'].', '; } $str .= '$ranklist);'; eval($str); } return $ranklist; } $datalist = array( array('No'=>1, 'Fuin'=>'10000', 'iNum'=>1000, 'fdate'=>'2015-03-27', 'remark1'=>'500', 'remark2'=>'300', 'remark3'=>'200'), array('No'=>2, 'Fuin'=>'10001', 'iNum'=>2000, 'fdate'=>'2015-03-28', 'remark1'=>'1000', 'remark2'=>'600', 'remark3'=>'400'), array('No'=>3, 'Fuin'=>'10002', 'iNum'=>3000, 'fdate'=>'2015-03-29', 'remark1'=>'1500', 'remark2'=>'900', 'remark3'=>'600'), array('No'=>4, 'Fuin'=>'10003', 'iNum'=>4000, 'fdate'=>'2015-03-30', 'remark1'=>'2000', 'remark2'=>'1200', 'remark3'=>'800'), array('No'=>5, 'Fuin'=>'10004', 'iNum'=>5000, 'fdate'=>'2015-03-31', 'remark1'=>'2500', 'remark2'=>'1500', 'remark3'=>'1000') ); $datalist = _handle_ranking_list($datalist, array(array('key'=>'iNum', 'order'=>'SORT_DESC'))); print_r($datalist);exit; // 二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order = 0) { if (! is_array ( $arr )) { return false; } $keysvalue = array (); foreach ( $arr as $key => $val ) { $keysvalue [$key] = $val [$keys]; } if ($order == 0) { asort ( $keysvalue ); } else { arsort ( $keysvalue ); } reset ( $keysvalue ); foreach ( $keysvalue as $key => $vals ) { $keysort [$key] = $key; } $new_array = array (); foreach ( $keysort as $key => $val ) { $new_array [$key] = $arr [$val]; } return $new_array; } //二位数组排序节约代码版 function array_sort($arr, $key_order, $order=0) { if (!is_array($arr)) { return false; } $arrValue = array(); foreach ($arr as $key=>$value) { $arrValue[$key] = $value[$key_order]; } if ($order == 0) { asort($arrValue); } else { arsort($arrValue); } $arrnew = array(); foreach ($arrValue as $key=>$value) { $arrnew[$value] = $arr[$key]; } return $arrnew; } |
|||
使用openssl命令行生成密钥对 | php | iOS RSA公钥加密数据 服务端接受PHP私钥解密 反过服务端公钥加密数据 iOS端私钥解密数据 | |
/** * 生成公共与私有证书操作 * openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem * 生成测试用公共证书操作 * openssl rsa -in private_key.pem -pubout -out public_key.pem * 在本地进行加密调试时,使用public_key.pem证书 * @author ljqian<ljqian@163.com> */ class RSA{ private $_filename; private $_key_content; public function __construct($filename){ if(empty($filename)){ $this->_show_msg('ERROR'); } $this->_filename = $filename; $this->_get_key_content(); if(empty($this->_key_content)){ $this->_show_msg('ERROR'); } } /** * 加密操作 * @param string $sourcestr 源数据 * @return string $base64_encode_str 加密后的输出数据 */ public function publickey_encode($sourcestr){ $pubkeyid = openssl_get_publickey($this->_key_content); if(openssl_public_encrypt($sourcestr, $crypttext, $pubkeyid)){ return base64_encode("".$crypttext); } } /** * 解密操作 * @param string $crypttext 源数据 * @return string $sourcestr 解密后的输出数据 */ public function privatekey_decode($crypttext){ $prikeyid = openssl_pkey_get_private($this->_key_content, 'cslove090'); $crypttext = base64_decode($crypttext); if(openssl_private_decrypt($crypttext, $sourcestr, $prikeyid, OPENSSL_PKCS1_PADDING)){ //do success return $sourcestr; } } /** * 获取证书内容 */ private function _get_key_content(){ $this->_key_content = file_get_contents($this->_filename); } private function _show_msg($msg){ echo $msg;exit; } } $rsa_pub = new RSA('public_key.pem');//导入公共证书 $pub_content = $rsa_pub->publickey_encode('hello world');//加密操作 $rsa_pri = new RSA('private_key.pem');//导入私有证书 $rsa_pri->privatekey_decode($pub_content);//解密操作 |
|||
整合ios和android的推送代码,后台 | php, 推送 | ||
<?php class helper_push{ const MAXTIMES = 3; static private $_times = 0; private $fp; const APIKEY = ''; const SECRETKEY = ''; const PWD = ''; public function __construct(){ } public function getLink(){ $passphrase = PWD; $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', DEDEDATA.'/ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client( 'ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp){//连接失败 if(self::$_times < self::MAXTIMES){//失败次数小于5次,再次实例化 self::$_times += 1; return $this->getLink(); }else{//失败次数大于5次,记录操作失败记录 return false; } }else{//连接成功 $this->fp = $fp; return true; } } public function closefp(){ fclose($this->fp); } public function setPush($deviceToken,$message){ if($this->is_serialized($deviceToken)){ $user_id = $channel_id = ''; $dt_arr = unserialize($deviceToken); $user_id = $dt_arr['user_id']; $channel_id = $dt_arr['channel_id']; $this->setAndroidPush($user_id,$channel_id,$message); unset($user_id,$channel_id,$dt_arr); }else{ $this->setIOSPush($deviceToken, $message); } } private function setIOSPush($deviceToken,$message){ $body['aps'] = $message; $payload = json_encode($body); $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; $result = fwrite($this->fp, $msg, strlen($msg)); if (!$result){//发送失败 if(self::$_times < self::MAXTIMES){//失败次数小于5次,再次发送 self::$_times += 1; $this->setPush($deviceToken, $message); }else{//失败次数大于5次,记录操作失败记录 return false; } }else{//发送成功 return true; } } /** * * 已广播的形式发送推送通知 * @param array $message_arr */ public function a_broadcastPush($message_arr){ require_once ( "Channel.class.php" ) ; $channel = new Channel(self::APIKEY,self::SECRETKEY); $push_type = 3; $optional[Channel::MESSAGE_TYPE] = 1; $message_str = '"description":"'.$message_arr['alert'].'",'; unset($message_arr['alert'],$message_arr['badge'],$message_arr['sound']); $custom_content = ''; foreach ($message_arr as $key=>$value){ $custom_content .= '"'.$key.'":"'.$value.'",'; } $custom_content = trim($custom_content,','); $message = '{ "title": "'.diconv('中文', 'gbk', 'utf-8').'", '.$message_str.' "custom_content":{'.$custom_content.'}, "notification_basic_style":7, "open_type":0 }'; unset($message_str,$custom_content); $message_key = "msg_key"; $ret = $channel->pushMessage ( $push_type, $message, $message_key,$optional ) ; return $ret; } private function setAndroidPush($user_id,$channel_id,$message_arr){ require_once ( "Channel.class.php" ) ; $channel = new Channel(self::APIKEY,self::SECRETKEY); $push_type = 1; $optional[Channel::USER_ID] = $user_id; $optional[Channel::CHANNEL_ID] = $channel_id; $optional[Channel::DEVICE_TYPE] = 3; $optional[Channel::MESSAGE_TYPE] = 1; $message_str = '"description":"'.$message_arr['alert'].'",'; unset($message_arr['alert'],$message_arr['badge'],$message_arr['sound']); $custom_content = ''; foreach ($message_arr as $key=>$value){ $custom_content .= '"'.$key.'":"'.$value.'",'; } $custom_content = trim($custom_content,','); $message = '{ "title": "'.diconv('中文', 'gbk', 'utf-8').'", '.$message_str.' "custom_content":{'.$custom_content.'}, "notification_basic_style":7, "open_type":0 }'; unset($message_str,$custom_content); $message_key = "msg_key"; $ret = $channel->pushMessage ( $push_type, $message, $message_key, $optional ) ; if ( false === $ret ){ // file_put_contents(dirname(__FILE__).'\push.log','Message not delivered, user_id:'.$user_id.' and channel_id:'.$channel_id.' and msg:'.$message,FILE_APPEND); }else{ // file_put_contents(dirname(__FILE__).'\push.log','Message successfully delivered, user_id:'.$user_id.' and channel_id:'.$channel_id.' and msg:'.$message,FILE_APPEND); } } private function is_serialized($data){ $data = trim( $data ); if ( 'N;' == $data ) return true; if ( !preg_match( '/^([adObis]):/', $data, $badions ) ) return false; switch ( $badions[1] ) { case 'a' : case 'O' : case 's' : if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) ) return true; break; case 'b' : case 'i' : case 'd' : if ( preg_match( "/^{$badions[1]}:[0- E-]+;\$/", $data ) ) return true; break; } return false; } } ?> |
|||
php常用扩展方法 | php | ||
function is_serialized($data) { $data = trim( $data ); if ( 'N;' == $data ) return true; if ( !preg_match( '/^([adObis]):/', $data, $badions ) ) return false; switch ( $badions[1] ) { case 'a' : case 'O' : case 's' : if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) ) return true; break; case 'b' : case 'i' : case 'd' : if ( preg_match( "/^{$badions[1]}:[0- E-]+;\$/", $data ) ) return true; break; } return false; } $d = new DateTime('2047-06-19 00:00:00'); echo $d->format('U'); |
|||
在给定目录下替换所有指定的内容 | php | ||
class loopfile{ private $file_dir = ''; private $replace_value = ''; private $find_value = ''; private $suffix_filter = array(); /** * * 构造函数 * @param string $file_dir 指定需要进行替换操作的路径 * @param string $find_value 指定需要被替换的值 * @param string $replace_value 指定替换的值 * @param array $suffix_filter 筛选后缀类型,若为空,则不进行筛选 */ public function __construct($file_dir, $find_value, $replace_value, $suffix_filter = array()){ $this->file_dir = $file_dir; $this->find_value = $find_value; $this->replace_value = $replace_value; $this->suffix_filter = $suffix_filter; $this->doWithFiles(); } /** * * 进行替换操作 */ private function doWithFiles(){ $files = array(); $this->findAllFileInDir($this->file_dir, $files); if (!empty($files)){ foreach ($files as $file_path){ if ($this->suffixFilter($file_path)){ $this->doWithOneFile($file_path); } } echo 'All files have finished!'; } } /** * * 找出在指定路径下,所有的文件名(路径),包括子目录下的文件名 * @param string $path 指定的路径 * @param array $files 存放文件名路径 */ private function findAllFileInDir($path, &$files){ if(is_dir($path)){ $dp = dir($path); while ($file = $dp ->read()){ if($file !="." && $file !=".."){ $this->findAllFileInDir($path."/".$file, $files); } } $dp ->close(); } if(is_file($path)){ $files[] = $path; } } /** * * 筛选文件的后缀名,若筛选内容为空,则显示所有类型文件,若不为空,则只显示指定的后缀文件 * @param string $file_path 文件名路径 */ private function suffixFilter($file_path){ $file_path_arr = explode('.', $file_path); if (!empty($this->suffix_filter)){ if (in_array($file_path_arr[1], $this->suffix_filter)){ return true; }else{ return false; } }else{ return true; } } /** * * 给定一个文件的路径,进行替换操作 * @param string $file_path 文件名路径 */ private function doWithOneFile($file_path){ $_contents = file_get_contents($file_path); $_contents = $this->findAndReplace($_contents); file_put_contents($file_path, $_contents); echo $file_path.' OK</br>'; } /** * * 替换操作 * @param string $contents 需要操作的内容 */ private function findAndReplace($contents){ return str_ireplace($this->find_value, $this->replace_value, $contents); } } $loopfile = new loopfile('E:/qlj/study/test','ljqian','qlj',array('txt')); |
|||
导出word格式 | php, word, 导出 | ||
/** * 文件导出为word格式 * @param string $filname //输出的文件名 * @param string $type //编码类型 * @param string $array //excel的标题 * @param string $data //需要的数据data * eg.exportExcel(test, 'utf-8', array('测试','OK'),array(array('ceshishuju1','OK1'),array('ceshi2','OK2'),array('ceshi3',''),array('','OK4'))); */ function exportWord($filename, $type = 'utf-8', $array, $data){ header( "Pragma: public" ); header( "Expires: 0" ); // set expiration time header( "Cache-Component: must-revalidate, post-check=0, pre-check=0" ); header( "Content-type:application/msword"); $filename=rawurldecode($filename); $filename=iconv("UTF-8","gb2312//IGNORE",$filename); header( 'Content-Disposition: attachment; filename="'.$filename.'"' ); header( 'Content-Transfer-Encoding: binary' ); echo '<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word">'; echo "<META HTTP-EQUIV='Content-Type' CONTENT='text/html;charset=$type'>"; echo '<table border="1" cellspacing="1" cellpadding="1"><tr align="center">'; foreach ($array as $val) { echo "<td width='100'>$val</td>"; } echo '</tr>'; foreach ($data as $val) { if(is_array($val)){ echo '<tr align="center">'; foreach ($val as $v) { echo '<td width="120" height="30">' . $v . '</td>'; } echo '</td>'; }else { echo '<tr align="center">'; echo '<td width="120" height="30">' . $val . '</td>'; echo '</td>'; } } echo $html; echo '</html>'; exit; } |
|||
php导入导出excel方法 | excel, php | ||
<?php //导出excel /** * @param string $filname //输出的文件名 * @param string $type //编码类型 * @param string $array //excel的标题 * @param string $data //需要的数据data * eg.exportExcel(test, 'utf-8', array('测试','OK'),array(array('ceshishuju1','OK1'),array('ceshi2','OK2'),array('ceshi3',''),array('','OK4'))); **/ function exportExcel($filname, $type = 'utf-8', $array, $data) { if (empty ($data)) { echo "<script>alert('sorry,no data!');history.go(-1);</script>"; exit; } $filname = iconv("utf-8", "gb2312", $filname); header("Content-type:application/vnd.ms-excel;"); header("Content-Disposition:attachment;filename=$filname.xls"); echo "<META HTTP-EQUIV='Content-Type' CONTENT='text/html;charset=$type'>"; echo '<table border="1" cellspacing="1" cellpadding="1"><tr align="center">'; foreach ($array as $val) { echo "<td width='100'>$val</td>"; } echo '</tr>'; foreach ($data as $val) { if(is_array($val)){ echo '<tr align="center">'; foreach ($val as $v) { echo '<td width="120" height="30">' . $v . '</td>'; } echo '</td>'; }else { echo '<tr align="center">'; echo '<td width="120" height="30">' . $val . '</td>'; echo '</td>'; } } echo '</table>'; exit; } ?> <?php //导入excel $excelfile = $_FILES['excelfile']; $filename = $excelfile['name']; $tmp_name = $excelfile['tmp_name']; move_uploaded_file ($tmp_name,'/upload/'.$filename); //reader.php需要从 http://sourceforge.net/projects/phpexcelreader 下载 //reader.php中的require_once 'Spreadsheet/Excel/Reader/OLERead.php';这行代码需要进行修改 //修改为引用与它同文件下的oleread.inc require_once ('reader.php'); $data = new Spreadsheet_Excel_Reader(); $data->setOutputEncoding('gbk'); $data->read('/upload/'.$filename); $customs = array(); // $data->sheets[0]['numRows']为Excel行数 // $data->sheets[0]['numCols'] 为Excel列数 for($i = 2; $i <= $data->sheets[0]['numRows']; $i++) {//$i为2是由于第一行为各字段的标题 $id = mysql_real_escape_string($data->sheets[0]['cells'][$i][1]); $title = mysql_real_escape_string($data->sheets[0]['cells'][$i][2]); $tel = mysql_real_escape_string($data->sheets[0]['cells'][$i][3]); $description = mysql_real_escape_string($data->sheets[0]['cells'][$i][4]); array_push($customs, array('title'=>$title,'tel'=>$tel,'description'=>$description)); } var_dump($customs); //打印出的数据格式是excel中每行内容组成的数组,在上述的代码中只打印1-4列的内容 ?> |
|||
PHP获取字符串第一个字的大写首字母 | php, 字符串大写首字母 | ||
//页面编码需要UTF-8 function pingyinFirstChar($sourcestr){ $returnstr=''; $i=0; $n=0; $str_length=strlen($sourcestr);//字符串的字节数 while ($i<=$str_length) { $temp_str=substr($sourcestr,$i,1); $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码 if ($ascnum>=224){ //如果ASCII位高与224, $returnstr=$returnstr.getHanziInitial(substr($sourcestr,$i,3)); //根据UTF-8编码规范,将3个连续的字符计为单个字符 $i=$i+3; //实际Byte计为3 }else if($ascnum>=192){ //如果ASCII位高与192, $returnstr=$returnstr.getHanziInitial(substr($sourcestr,$i,2)); //根据UTF-8编码规范,将2个连续的字符计为单个字符 $i=$i+2; //实际Byte计为2 }else if($ascnum>=65 && $ascnum<=90){ //如果是大写字母, $returnstr=$returnstr.substr($sourcestr,$i,1); $i=$i+1; //实际的Byte数仍计1个 }else{ //其他情况下,包括小写字母和半角标点符号, $returnstr=$returnstr.strtoupper(substr($sourcestr,$i,1)); //小写字母转换为大写 $i=$i+1; //实际的Byte数计1个 } } return $returnstr; } function getHanziInitial($s0){ if(ord($s0) >= "1" and ord($s0) <= ord("z")){ return strtoupper($s0); } $s = iconv("UTF-8", "gb2312//IGNORE", $s0); // 不要转换成GB2312内没有的字符哦,^_^ $asc = @ord($s{0}) * 256 + @ord($s{1})-65536; if($asc >= -20319 and $asc <= -20284)return "A"; if($asc >= -20283 and $asc <= -19776)return "B"; if($asc >= -19775 and $asc <= -19219)return "C"; if($asc >= -19218 and $asc <= -18711)return "D"; if($asc >= -18710 and $asc <= -18527)return "E"; if($asc >= -18526 and $asc <= -18240)return "F"; if($asc >= -18239 and $asc <= -17923)return "G"; if($asc >= -17922 and $asc <= -17418)return "H"; if($asc >= -17417 and $asc <= -16475)return "J"; if($asc >= -16474 and $asc <= -16213)return "K"; if($asc >= -16212 and $asc <= -15641)return "L"; if($asc >= -15640 and $asc <= -15166)return "M"; if($asc >= -15165 and $asc <= -14923)return "N"; if($asc >= -14922 and $asc <= -14915)return "O"; if($asc >= -14914 and $asc <= -14631)return "P"; if($asc >= -14630 and $asc <= -14150)return "Q"; if($asc >= -14149 and $asc <= -14091)return "R"; if($asc >= -14090 and $asc <= -13319)return "S"; if($asc >= -13318 and $asc <= -12839)return "T"; if($asc >= -12838 and $asc <= -12557)return "W"; if($asc >= -12556 and $asc <= -11848)return "X"; if($asc >= -11847 and $asc <= -11056)return "Y"; if($asc >= -11055 and $asc <= -10247)return "Z"; return $s0; // 返回原字符,不作转换。(标点、空格、繁体字都会直接返回) } |
|||
中文转拼音 | php | php 中文转拼音函数 | |
<?php function Pinyin($_String, $_Code='UTF8'){ //GBK页面可改为gb2312,其他随意填写为UTF8 $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha". "|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|". "cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er". "|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui". "|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang". "|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang". "|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue". "|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne". "|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen". "|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang". "|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|". "she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|". "tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu". "|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you". "|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|". "zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo"; $_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990". "|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725". "|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263". "|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003". "|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697". "|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211". "|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922". "|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468". "|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664". "|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407". "|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959". "|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652". "|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369". "|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128". "|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914". "|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645". "|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149". "|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087". "|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658". "|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340". "|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888". "|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585". "|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847". "|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055". "|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780". "|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274". "|-10270|-10262|-10260|-10256|-10254"; $_TDataKey = explode('|', $_DataKey); $_TDataValue = explode('|', $_DataValue); $_Data = array_combine($_TDataKey, $_TDataValue); arsort($_Data); reset($_Data); if($_Code!= 'gb2312') $_String = _U2_Utf8_Gb($_String); $_Res = ''; for($i=0; $i<strlen($_String); $i++) { $_P = ord(substr($_String, $i, 1)); if($_P>160) { $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536; } $_Res .= _Pinyin($_P, $_Data); } return preg_replace("/[^a-z0-9]*/", '', $_Res); } function _Pinyin($_Num, $_Data){ if($_Num>0 && $_Num<160 ){ return chr($_Num); }elseif($_Num<-20319 || $_Num>-10247){ return ''; }else{ foreach($_Data as $k=>$v){ if($v<=$_Num) break; } return $k; } } function _U2_Utf8_Gb($_C){ $_String = ''; if($_C < 0x80){ $_String .= $_C; }elseif($_C < 0x800) { $_String .= chr(0xC0 | $_C>>6); $_String .= chr(0x80 | $_C & 0x3F); }elseif($_C < 0x10000){ $_String .= chr(0xE0 | $_C>>12); $_String .= chr(0x80 | $_C>>6 & 0x3F); $_String .= chr(0x80 | $_C & 0x3F); }elseif($_C < 0x200000) { $_String .= chr(0xF0 | $_C>>18); $_String .= chr(0x80 | $_C>>12 & 0x3F); $_String .= chr(0x80 | $_C>>6 & 0x3F); $_String .= chr(0x80 | $_C & 0x3F); } return iconv('UTF-8', 'GB2312', $_String); } //测试 echo Pinyin('中文字','gb2312'); //第二个参数“1”可随意设置即为utf8编码 ?> |