常用php函数,来自互联网
【摘要】
function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{0}); if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{...
-
function getFirstCharter($str){
-
-
if(empty($str)){return '';}
-
-
$fchar=ord($str{0});
-
-
if($fchar>=ord('A')&&$fchar<=ord('z')) return strtoupper($str{0});
-
-
$s1=iconv('UTF-8','gb2312',$str);
-
-
$s2=iconv('gb2312','UTF-8',$s1);
-
-
$s=$s2==$str?$s1:$str;
-
-
$asc=ord($s{0})*256+ord($s{1})-65536;
-
-
if($asc>=-20319&&$asc<=-20284) return 'A';
-
-
if($asc>=-20283&&$asc<=-19776) return 'B';
-
-
if($asc>=-19775&&$asc<=-19219) return 'C';
-
-
if($asc>=-19218&&$asc<=-18711) return 'D';
-
-
if($asc>=-18710&&$asc<=-18527) return 'E';
-
-
if($asc>=-18526&&$asc<=-18240) return 'F';
-
-
if($asc>=-18239&&$asc<=-17923) return 'G';
-
-
if($asc>=-17922&&$asc<=-17418) return 'H';
-
-
if($asc>=-17417&&$asc<=-16475) return 'J';
-
-
if($asc>=-16474&&$asc<=-16213) return 'K';
-
-
if($asc>=-16212&&$asc<=-15641) return 'L';
-
-
if($asc>=-15640&&$asc<=-15166) return 'M';
-
-
if($asc>=-15165&&$asc<=-14923) return 'N';
-
-
if($asc>=-14922&&$asc<=-14915) return 'O';
-
-
if($asc>=-14914&&$asc<=-14631) return 'P';
-
-
if($asc>=-14630&&$asc<=-14150) return 'Q';
-
-
if($asc>=-14149&&$asc<=-14091) return 'R';
-
-
if($asc>=-14090&&$asc<=-13319) return 'S';
-
-
if($asc>=-13318&&$asc<=-12839) return 'T';
-
-
if($asc>=-12838&&$asc<=-12557) return 'W';
-
-
if($asc>=-12556&&$asc<=-11848) return 'X';
-
-
if($asc>=-11847&&$asc<=-11056) return 'Y';
-
-
if($asc>=-11055&&$asc<=-10247) return 'Z';
-
-
return null;
-
-
}
-
-
-
-
公司同事整理的类,挺实用的.相信拿出来分享下他不会介意的O(∩_∩)O.不过如果首字母是数字或英文会有些问题.
-
-
/**
-
-
* Helper_Spell 汉字拼音首字母工具类
-
-
*
-
-
* @category Helper
-
-
* @package Helper_Spell
-
-
* @author Lancer <lancer.he@gmail.com>
-
-
* @version 1.0
-
-
* @see Translation_Big2gb
-
-
*/
-
-
class Helper_Spell {
-
-
-
-
/**
-
-
* $_pinyins
-
-
* @var array
-
-
* @access private
-
-
*/
-
-
private $_pinyins = array(
-
-
176161 => 'A',
-
-
176197 => 'B',
-
-
178193 => 'C',
-
-
180238 => 'D',
-
-
182234 => 'E',
-
-
183162 => 'F',
-
-
184193 => 'G',
-
-
185254 => 'H',
-
-
187247 => 'J',
-
-
191166 => 'K',
-
-
192172 => 'L',
-
-
194232 => 'M',
-
-
196195 => 'N',
-
-
197182 => 'O',
-
-
197190 => 'P',
-
-
198218 => 'Q',
-
-
200187 => 'R',
-
-
200246 => 'S',
-
-
203250 => 'T',
-
-
205218 => 'W',
-
-
206244 => 'X',
-
-
209185 => 'Y',
-
-
212209 => 'Z',
-
-
215249 => 'Z',
-
-
);
-
-
-
-
/**
-
-
* $_charset
-
-
* @var string
-
-
* @access private
-
-
*/
-
-
private $_charset = null;
-
-
-
-
-
-
/**
-
-
* __construct 构造函数, 指定需要的编码 default: utf-8 支持utf-8, gb2312
-
-
*
-
-
* @param unknown_type $charset
-
-
*/
-
-
public function __construct( $charset = 'utf-8' ) {
-
-
$this->_charset = $charset;
-
-
}
-
-
-
-
-
-
/**
-
-
* getInitialsFirst 返回首个汉字的拼音
-
-
*
-
-
* @access public
-
-
* @static
-
-
* @param string $str
-
-
* @return string
-
-
* @example Helper_Spell::getInitialsFirst('我的爱'); => w
-
-
*/
-
-
public static function getInitialsFirst( $str, $charset = 'utf-8' ) {
-
-
$chars = array(
-
-
'A','B','C','D','E','F',
-
-
'G','H','I','J','K','L',
-
-
'M','N','O','P','Q','R',
-
-
'S','T','U','V','W','X',
-
-
'Y','Z');
-
-
-
-
$string = self::getInitials( $str );
-
-
$length = strlen($string);
-
-
-
-
for($i=0; $i < $length; $i++) {
-
-
if ( in_array( $string{$i}, $chars ) ) {
-
-
return $string{$i};
-
-
}
-
-
}
-
-
return '*';
-
-
}
-
-
-
-
-
-
/**
-
-
* getInitials 返回拼音组合
-
-
*
-
-
* @access public
-
-
* @static
-
-
* @param string $str
-
-
* @return string
-
-
* @example Helper_Spell::getInitials('我的爱'); => wda
-
-
*/
-
-
public static function getInitials( $str, $charset = 'utf-8' ) {
-
-
$instance = new Helper_Spell( $charset );
-
-
return $instance->_getInitials( $str );
-
-
}
-
-
-
-
-
-
/**
-
-
* _getInitials 获取中文字串的拼音首字符
-
-
* 注:英文的字串:不变返回(包括数字) eg .abc123 => abc123
-
-
* 中文字符串:返回拼音首字符 eg. 王小明 => WXM
-
-
* 中英混合串: 返回拼音首字符和英文 eg. 我i我j => WIWJ
-
-
*
-
-
* @access private
-
-
* @param string $str
-
-
* @return string
-
-
*/
-
-
private function _getInitials( $str, $translation=TRUE ){
-
-
if ( empty($str) ) return '';
-
-
if ( $this->_isAscii($str[0]) && $this->_isAsciis( $str ))
-
-
return $str;
-
-
-
-
if ( $translation )
-
-
$str = Translation_Big2gb::big2gb( $str );
-
-
-
-
$result = array();
-
-
if ( $this->_charset == 'utf-8' ){
-
-
//IGNORE很重要,加上这个就可以是ICONV()函数忽略错误,继续执行
-
-
$str = iconv( 'utf-8', 'gbk//IGNORE', $str );
-
-
}
-
-
$words = $this->_cutWord( $str );
-
-
-
-
foreach ( $words AS $word ) {
-
-
if ( $this->_isAscii($word) ) {//非中文
-
-
$result[] = $word;
-
-
continue;
-
-
}
-
-
$code = ( ord(substr($word,0,1)) ) * 1000 + (ord(substr($word,1,1)));
-
-
//获取拼音首字母A--Z
-
-
-
-
if ( ($i = $this->_search($code)) != -1 ){
-
-
$result[] = $this->_pinyins[$i];
-
-
}
-
-
}
-
-
return strtoupper(implode('', $result));
-
-
}
-
-
-
-
-
-
/**
-
-
* _msubstr 获取中文字符串
-
-
*
-
-
* @access private
-
-
* @param string $str
-
-
* @param int $start
-
-
* @param int $len
-
-
* @return string
-
-
*/
-
-
private function _msubstr ($str, $start, $len) {
-
-
$start = $start * 2;
-
-
$len = $len * 2;
-
-
$strlen = strlen($str);
-
-
$result = '';
-
-
for ( $i = 0; $i < $strlen; $i++ ) {
-
-
if ( $i >= $start && $i < ($start + $len) ) {
-
-
if ( ord(substr($str, $i, 1)) > 129 ) $result .= substr($str, $i, 2);
-
-
else $result .= substr($str, $i, 1);
-
-
}
-
-
if ( ord(substr($str, $i, 1)) > 129 ) $i++;
-
-
}
-
-
return $result;
-
-
}
-
-
-
-
-
-
/**
-
-
* _cutWord 字符串切分为数组 (汉字或者一个字符为单位)
-
-
*
-
-
* @access private
-
-
* @param string $str
-
-
* @return array
-
-
*/
-
-
private function _cutWord( $str ) {
-
-
$words = array();
-
-
while ( $str != "" ) {
-
-
if ( $this->_isAscii($str) ) {//非中文
-
-
$words[] = $str[0];
-
-
$str = substr( $str, strlen($str[0]) );
-
-
} else {
-
-
$word = $this->_msubstr( $str, 0, 1 );
-
-
$words[] = $word;
-
-
$str = substr( $str, strlen($word) );
-
-
}
-
-
}
-
-
return $words;
-
-
}
-
-
-
-
-
-
/**
-
-
* _isAscii 判断字符是否是ascii字符
-
-
*
-
-
* @access private
-
-
* @param string $char
-
-
* @return bool
-
-
*/
-
-
private function _isAscii( $char ) {
-
-
return ( ord( substr($char,0,1) ) < 160 );
-
-
}
-
-
-
-
-
-
/**
-
-
* _isAsciis 判断字符串前3个字符是否是ascii字符
-
-
*
-
-
* @access private
-
-
* @param string $str
-
-
* @return bool
-
-
*/
-
-
private function _isAsciis( $str ) {
-
-
$len = strlen($str) >= 3 ? 3: 2;
-
-
$chars = array();
-
-
for( $i = 1; $i < $len -1; $i++ ){
-
-
$chars[] = $this->_isAscii( $str[$i] ) ? 'yes':'no';
-
-
}
-
-
$result = array_count_values( $chars );
-
-
if ( empty($result['no']) ){
-
-
return true;
-
-
}
-
-
return false;
-
-
}
-
-
-
-
-
-
-
-
/**
-
-
* _getChar 通过ASC码返回字母或者数字
-
-
*
-
-
* @access private
-
-
* @param string $ascii
-
-
* @return string
-
-
*/
-
-
private function _getChar( $ascii ){
-
-
if ( $ascii >= 48 && $ascii <= 57 ) {
-
-
return chr($ascii); //数字
-
-
} elseif ( $ascii>=65 && $ascii<=90 ) {
-
-
return chr($ascii); // A--Z
-
-
} elseif ($ascii>=97 && $ascii<=122 ) {
-
-
return chr($ascii-32); // a--z
-
-
} else {
-
-
return '~'; //其他
-
-
}
-
-
}
-
-
-
-
-
-
/**
-
-
* _search 查找需要的汉字内码(gb2312) 对应的拼音字符(二分法)
-
-
*
-
-
* @access private
-
-
* @param int $code
-
-
* @return int
-
-
*/
-
-
private function _search( $code ) {
-
-
$data = array_keys($this->_pinyins);
-
-
-
-
$lower = 0;
-
-
$upper = sizeof($data)-1;
-
-
-
-
// 排除非一级汉字
-
-
if ($code < $data[0] || $code > $data[23]) return -1;
-
-
-
-
for (;;) {
-
-
if ( $lower > $upper ){
-
-
return $data[$lower-1];
-
-
}
-
-
$middle = (int) round(($lower + $upper) / 2);
-
-
if ( !isset($data[$middle]) ) {
-
-
return -1;
-
-
}
-
-
-
-
if ( $data[$middle] < $code ){
-
-
$lower = (int)$middle + 1;
-
-
} else if ( $data[$middle] == $code ) {
-
-
return $data[$middle];
-
-
} else {
-
-
$upper = (int)$middle - 1;
-
-
}
-
-
}// end for
-
-
}
-
-
}
文章来源: coderfix.blog.csdn.net,作者:小雨青年,版权归原作者所有,如需转载,请联系作者。
原文链接:coderfix.blog.csdn.net/article/details/17239669
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)