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 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
php 生成静态页面的办法与实现代码详细版
Feb 15 PHP
Could not load type System.ServiceModel.Activation.HttpModule解决办法
Dec 29 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
php cli换行示例
Apr 22 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
PHP微信支付实例解析
Jul 22 PHP
全面解析PHP面向对象的三大特征
Jun 10 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
php 读取文件夹下所有图片、文件的实例
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
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP嵌套输出缓冲代码实例
2015/05/12 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
2019/05/21 PHP
javascript 拖动表格行实现代码
2011/05/05 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
Backbone.js的一些使用技巧
2015/07/01 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
2015/08/01 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
妙用Angularjs实现表格按指定列排序
2017/06/23 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
实例讲解javascript实现异步图片上传方法
2017/12/05 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python实现爬虫下载漫画示例
2014/02/16 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Django中Model的使用方法教程
2018/03/07 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
遗体告别仪式答谢词
2014/01/23 职场文书
北体毕业生求职信
2014/02/28 职场文书
项目投资意向书
2014/04/01 职场文书
灵魂歌王观后感
2015/06/17 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
Python如何把不同类型数据的json序列化
2021/04/30 Python