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 相关文章推荐
JAVA/JSP学习系列之四
Oct 09 PHP
让PHP支持页面回退的两种方法
Jan 10 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
PHP 二维数组根据某个字段排序的具体实现
Jun 03 PHP
yii中widget的用法
Dec 03 PHP
制作安全性高的PHP网站的几个实用要点
Dec 30 PHP
百度地图API使用方法详解
Aug 25 PHP
WordPress迁移时一些常见问题的解决方法整理
Nov 24 PHP
php 如何获取文件的后缀名
Jun 05 PHP
PHP数据库操作四:mongodb用法分析
Aug 16 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php显示页码分页类的封装
2017/06/08 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
jquery miniui 教程 表格控件 合并单元格应用
2012/11/25 Javascript
JSON+JavaScript处理JSON的简单例子
2013/03/20 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
JQuery表单验证插件EasyValidator用法分析
2014/11/15 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
用原生js统计文本行数的简单示例
2016/08/19 Javascript
微信小程序url传参写变量的方法
2018/08/09 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
微信小程序文字显示换行问题
2019/07/28 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
使用vue3重构拼图游戏的实现示例
2021/01/25 Vue.js
Python爬豆瓣电影实例
2018/02/23 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
利用python numpy+matplotlib绘制股票k线图的方法
2019/06/26 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
python视频按帧截取图片工具
2019/07/23 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
python调用私有属性的方法总结
2020/07/24 Python
一份比较全的PHP面试题
2016/07/29 面试题
工商管理实习生自我鉴定范文
2013/12/18 职场文书
JAVA程序员自荐书
2014/01/30 职场文书
后勤主管岗位职责
2014/03/01 职场文书
任命书格式
2014/06/05 职场文书
沈阳故宫导游词
2015/01/31 职场文书
党员活动总结
2015/02/04 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python