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 24 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
Jun 12 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
php使用Cookie控制访问授权的方法
Jan 21 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
PHP目录操作实例总结
Sep 27 PHP
PHP实现微信退款功能
Oct 02 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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优化需要注意的地方
2014/11/27 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
cookie.js 加载顺序问题怎么才有效
2013/07/31 Javascript
Jquery 例外被抛出且未被接住原因介绍
2013/09/04 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
Nuxt项目支持eslint+pritter+typescript的实现
2019/05/20 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
浅谈对yield的初步理解
2017/05/29 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
2019/07/03 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
网络书店创业计划书
2014/02/07 职场文书
2014年大学学生会工作总结
2014/12/02 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
创业计划书之餐饮
2019/09/02 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript