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实现智能文件类型检测的实现代码
Aug 02 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
Sep 30 PHP
php-fpm配置详解
Feb 12 PHP
PHP编译安装中遇到的两个错误和解决方法
Aug 20 PHP
PHP统一页面编码避免乱码问题
Apr 09 PHP
php实现简单的语法高亮函数实例分析
Apr 27 PHP
如何使用php实现评委评分器
Jul 31 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
php单链表实现代码分享
Jul 04 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
Apr 01 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 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使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
php创建图像具体步骤
2017/03/13 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
mac下给python3安装requests库和scrapy库的实例
2018/06/13 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
Alexandre Birman美国官网:亚历山大·伯曼
2019/10/30 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
2014社区三八妇女节活动总结
2014/03/01 职场文书
旅游管理毕业生自荐信范文
2014/03/19 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
求职自我评价怎么写
2015/03/09 职场文书
校园开放日新闻稿
2015/07/17 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
我家女友可不止可爱呢 公开OP主题曲无字幕动画MV
2022/04/11 日漫
CSS子盒子水平和垂直居中的五种方法
2022/07/23 HTML / CSS