常用php函数,来自互联网

简介: function getFirstCharter($str){ if(empty($str)){return '';} $fchar=ord($str{0}); if($fchar>=ord('A')&&$fchar=-20319&&$asc=-20283&&$...
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

    }

}

目录
相关文章
|
14天前
|
PHP
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
本文介绍了解决PHP常见问题的步骤,包括定位和创建`php.ini`文件,以及解决`mb_strlen()`函数未定义和DLL模块加载错误的具体方法。
php常见问题,php.ini文件不存在或者找不到,mb_strlen()函数未定义系列问题,dll模块找不到的解决
|
14天前
|
存储 API PHP
php学习笔记-php数组的创建和使用,数组常用函数-day03
关于PHP数组的创建、使用以及常用函数的详细学习笔记。
php学习笔记-php数组的创建和使用,数组常用函数-day03
|
6天前
|
Unix PHP 数据库
PHP日期和时间Date()函数获取当前时间
通过灵活运用 `date()`函数及其丰富的格式选项,PHP开发者可以轻松地在应用程序中处理和展示日期及时间信息。无论是需要精确到秒的完整时间戳,还是仅仅展示日期或时间的某一部分,`date()`函数都能胜任。理解并熟练应用这些格式化技巧,对于提升代码的可读性和维护性至关重要。
15 1
|
14天前
|
XML SQL PHP
php学习笔记-php字符串及字符串常用函数总结-day04
本文总结了PHP中字符串的三种定义方式和常用字符串处理函数,包括字符串的修剪、转换、长度计算、子串操作、比较、连接、分割及替换等操作。
|
15天前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
2月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
28 2
|
2月前
|
JavaScript 前端开发 PHP
|
2月前
|
监控 数据库连接 PHP
php中register_shutdown_function函数用法详解
通过 `register_shutdown_function`,PHP开发者可以对脚本的终止进行更精细化的处理,这个函数让开发者能在脚本的生命周期结束时有机会执行最后的操作,无论脚本是正常结束还是发生错误。由于它的高度实用性和灵活性,`register_shutdown_function`是PHP开发中不可或缺的工具之一。
43 0
|
3月前
|
SQL 关系型数据库 MySQL
php所有函数总结
以上只是PHP中函数的一部分,实际上PHP提供了丰富的内置函数,能够处理各种复杂的任务。
22 2
|
3月前
|
存储 Serverless PHP