PHP实现字符串大小写转函数的功能实例


Posted in PHP onFebruary 06, 2019

字符串的大小写转换功能在日常中经常使用。那么如何实现一个简单的大小写转换功能呢?

在php中,最终使用的是c语言的toupper,tolower函数将字符进行大小写转换。因此需要定义一个字符大小写转换的函数。

//字符转大写protected function toupper($c){
$ord = ord($c);
return $ord>=97 && $ord<=122 ?chr($ord-32):$c;}//字符转小写protected function tolower($c){
$ord = ord($c);
return $ord>=65 && $ord<=90 ?chr($ord+32):$c;}

字符的大小写转换就是进行ascii码的转换。A-Z的ASCII码在65-90之间。a-z的ASCII码在97-122之间。对于不在转换区间的字符,应该原样返回

php中字符串大小写转换有下面几个函数 strtolower , strtoupper , lcfirst , ucfirst , ucwords , lcfirst , 这几个函数都是成对的,因此仅以大写转小写为例说明如何实现这几个函数

strtoupper 实现字符串从大写转小写。无非是遍历字符串的每个字符,将大写字符转换成小写。

public function strtolower($str){
 if($this->checkempty($str))
 {
 return "";
 }
 $len = strlen($str);
 for($i=0;$i<$len;$i++){
 $str[$i] = $this->tolower($str[$i]);
 }
 return $str;}

php字符串可以像数组一样用下标获取每个字符。因此对字符串每个字符遍历,转换成小写字符即可

lcfirst 实现首字母大写的功能,因此比strtolower还要简单

public function ucfirst($str){
 if($this->checkempty($str))
 {
 return "";
 }
 $str[0] = $this->toupper($str[0]);
 return $str;}

lcwords 实现单词首字母转小写。说单词,其实是空格后面第一个字符。因此只需要在遍历到空格字符后面第一个非空字符串转换成小写即可。

public function lcwords($str){
 if($this->checkempty($str))
 {
 return "";
 }
 $splitchar = [' ',"\n","\r","\f","\v"];
 $len = strlen($str);
 for($i=0;$i<$len;$i++){
 if(in_array($str[$i], $splitchar))
 {
 $i++;
 if($i>=$len)
 {
 break;
 }
 $str[$i] = $this->tolower($str[$i]);
 }
 }
 return $str;}

主要要小心越界的问题。如果最后一个字符串是空字符。

至于为什么单词分割字符是代码中的那几项,主要是php源码就是根据那几项实现的。php源码中ucwords实现方式如下:

PHP_FUNCTION(ucwords){
 zend_string *str;
 char *delims = " \t\r\n\f\v";
 register char *r, *r_end;
 size_t delims_len = 6;
 char mask[256];

 ZEND_PARSE_PARAMETERS_START(1, 2)
 Z_PARAM_STR(str)
 Z_PARAM_OPTIONAL Z_PARAM_STRING(delims, delims_len)
 ZEND_PARSE_PARAMETERS_END();

 if (!ZSTR_LEN(str)) {
 RETURN_EMPTY_STRING();
 }
 php_charmask((unsigned char *)delims, delims_len, mask);

 ZVAL_STRINGL(return_value, ZSTR_VAL(str), ZSTR_LEN(str));
 r = Z_STRVAL_P(return_value);

 *r = toupper((unsigned char) *r);
 for (r_end = r + Z_STRLEN_P(return_value) - 1; r < r_end; ) {
 if (mask[(unsigned char)*r++]) {
 *r = toupper((unsigned char) *r);
 }
 }}

将分割的字符串放入一个mask中,在遍历字符串的过程中判断是否是mask的字符。如果是则对后面一位字符进行大写转换操作。

最终代码地址https://github.com/froyot/froyot.github.io/tree/master/code

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
几个php应用技巧
Mar 27 PHP
来自phpguru得Php Cache类源码
Apr 15 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
php调用nginx的mod_zip模块打包ZIP文件
Jun 11 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
详解PHP中的状态模式编程
Aug 11 PHP
php无限级分类实现方法分析
Oct 19 PHP
php工具型代码之印章抠图
Jul 18 PHP
实例讲解php将字符串输出到HTML
Jan 27 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 PHP
PHP addcslashes()函数讲解
Feb 03 #PHP
PHP addslashes()函数讲解
Feb 03 #PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 #PHP
PHP simplexml_load_file()函数讲解
Feb 03 #PHP
PHP simplexml_import_dom()函数讲解
Feb 03 #PHP
PHP count()函数讲解
Feb 03 #PHP
PHP getDocNamespaces()函数讲解
Feb 03 #PHP
You might like
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
TP3.2批量上传文件或图片 同名冲突问题的解决方法
2017/08/01 PHP
PHP中ltrim()函数的用法与实例讲解
2019/03/28 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
jquery实现表单验证简单实例演示
2015/11/23 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
jQuery 3.0中存在问题及解决办法
2016/07/15 Javascript
javascript self对象使用详解
2016/10/18 Javascript
javascript入门之window对象【新手必看】
2016/11/22 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
了解JavaScript中的选择器
2019/05/24 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
[06:42]DOTA2每周TOP10 精彩击杀集锦vol.1
2014/06/25 DOTA
Python pickle模块用法实例
2015/04/14 Python
给你选择Python语言实现机器学习算法的三大理由
2017/11/15 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
Python Numpy:找到list中的np.nan值方法
2018/10/30 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
学期自我鉴定范文
2013/10/01 职场文书
音乐学个人的自荐书范文
2013/11/26 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
《海上日出》教学反思
2016/02/23 职场文书
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL