`
ljqian
  • 浏览: 6939 次
  • 性别: Icon_minigender_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编码  
    ?>  
Global site tag (gtag.js) - Google Analytics