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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
php获取一个变量的名字的方法
Sep 05 PHP
PHP比较运算符的详细介绍
Sep 29 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
PHP memcache在微信公众平台的应用方法示例
Sep 13 PHP
PHP应用跨时区功能的实现方法
Mar 21 PHP
Laravel配合jwt使用的方法实例
Oct 25 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php中显示数组与对象的实现代码
2011/04/18 PHP
php的ajax简单实例
2014/02/27 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
javaScript同意等待代码实现心得
2011/01/01 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
详解javascript遍历方式
2015/11/11 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
Angular数据绑定机制原理
2018/04/17 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
python读写二进制文件的方法
2015/05/09 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
让Python更加充分的使用Sqlite3
2017/12/11 Python
centos 安装Python3 及对应的pip教程详解
2019/06/28 Python
python多进程并发demo实例解析
2019/12/13 Python
Python对wav文件的重采样实例
2020/02/25 Python
Python selenium抓取虎牙短视频代码实例
2020/03/02 Python
CSS3 选择器 基本选择器介绍
2012/01/21 HTML / CSS
canvas里面如何基于随机点绘制一个多边形的方法
2018/06/13 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
高校毕业生自我鉴定
2013/10/27 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
2016初一新生军训心得体会
2016/01/11 职场文书
react 项目中引入图片的几种方式
2021/06/02 Javascript
Vue2.0搭建脚手架
2022/03/13 Vue.js
Windows Server 2012 修改远程默认端口3389的方法
2022/04/28 Servers