【PHP小课堂】学习PHP中的字符串操作函数(三)

学习PHP中的字符串操作函数(三)

继续我们的 PHP 中字符串函数的学习之旅。今天我们要学习的内容是除了 str_ 和 str 开头之外的其它函数,这些函数也有很多非常好玩的内容,让我们赶快进入主题吧。

分隔、打断字符串

关于这个分割字符串并成为数组,或者是反过来的将数组组合成字符串的功能来说,implode() 和 explode() 这两个函数真的是出镜率非常的高。所以它们的使用也不用我多做介绍了,直接上手就行。

$arrs = explode(',', 'a,b,c,d');
print_r($arrs);
// Array
// (
//     [0] => a
//     [1] => b
//     [2] => c
//     [3] => d
// )echo implode('-', $arrs), PHP_EOL; // a-b-c-d

explode() 函数还有第三个参数,是指定一共返回多少个数组元素的功能。比如我们指定返回两个元素的话,那么就会分割成下面这样的数组。

print_r(explode(',', 'a,b,c,d', 2));
// Array
// (
//     [0] => a
//     [1] => b,c,d
// )

另外还有一个函数,其实也就是 implode() 函数的别名,叫做 join() 函数。相信看到这个函数接触过其它语言的同学就感到非常亲切了,这才是这个字符串拼接功能的正确叫法嘛。这两个函数是一模一样的,join() 就是一个别名,不管我们使用哪个都可以。

除了分割字符串和拼接数组之外,我们还有一个函数可以按指定的字符数量来为字符串添加分割内容。

$text = "The quick brown fox jumped over the lazy dog.";
echo wordwrap($text, 20, "<br />\n"), PHP_EOL;
// The quick brown fox<br />
// jumped over the lazy<br />
// dog.

看出来没有,它是在我们指定的 20 个字符长度之后就把后面我们要添加的换行内容添加进了字符串中。其实它和我们上篇文章讲过的 chunk_split() 这个函数有点像,功能非常类似,而且也是返回的是一个字符串。

首字母大小写转换

这个和我们第一篇文章学习到的 strtoupper() 以及 strtolower() 是不同的功能了。它们两个都是对整个字符串中的全部字符起效果的,而我们今天学的内容只是对首字母起效果。

echo lcfirst('Open the door'), PHP_EOL; // open the door
echo ucfirst('open the door'), PHP_EOL; // Open the door
echo ucwords('open the door'), PHP_EOL; // Open The Door

lcfirst() 把第一个单词的首字母变成小写,ucfirst() 就是反过来将第一个单词的首字母变成大写。ucwords() 则是将每个单词的首字母都变成大写的。

字符串比较

首先是计算两个字符串之间的编辑距离。

echo levenshtein('carrot', 'carrrot'), PHP_EOL; // 1
echo levenshtein('carrot', 'banana'), PHP_EOL; // 5
echo levenshtein('carrot', 'orange'), PHP_EOL; // 6

编辑距离,是指两个字串之间,通过替换、插入、删除等操作将字符串 str1 转换成 str2 所需要操作的最少字符数量。其实我们就可以看做是两个字符串中不同字符的数量,当然,它们的位置也是一一对应的,比如说第二条中的 banana 中第二个 a 和 carrot 中的 a 对应上了,所以这个返回的是 5 。而最后一个测试代码中 orange 虽然也有 a ,但和 carrot 中的位置不对应,所以返回的就是 6 ,也就是所有字符都要替换。

接下来就是我原来接触并且在项目中使用过的一个函数。

echo similar_text('carrot', 'carrrot', $per), PHP_EOL; // 6
echo $per, PHP_EOL; // 92.307692307692
echo similar_text('carrot', 'banana', $per), PHP_EOL; // 1
echo $per, PHP_EOL; // 16.666666666667
echo similar_text('carrot', 'potato', $per), PHP_EOL; // 2
echo $per, PHP_EOL; // 33.333333333333

similar_text() 函数返回的是两个字符串的相似程度。如果给定最后一个参数为一个引用变量的话,那么将会将两个字符串中的相似比率放到这个变量中,在后面打印这个变量就可以看到这两个字符串的相似比率。

我之前做过的项目中,有伪原创的判断识别功能,就是利用的这一个函数。作者在针对某篇文章进行伪原创的时候,会将他新写的内容与文章原文进行对比,在提交文章保存的时候就会比较相似度,使用的就是这个函数。

字符串两边去除特殊字符

其实这个功能相关的函数也不用我多介绍了,毕竟也是很常用的函数之一。

echo trim("  \r\n\tTest\t"), PHP_EOL; // Testecho trim("a-Test--a", 'a'), PHP_EOL; // -Test--echo ltrim("  \r\n\tTest\t"), PHP_EOL;
// Test echo rtrim("  \r\n\tTest\t"), PHP_EOL;
//  
// Test

需要注意的,原来我也一直以为这个 trim() 默认情况下只是去除空格,其实,如果不给第二个参数的话,它会去除 空格、\n、\t、\r、\0、\x0B 这些内容。如果我们指定了第二个参数的话,那么就是按第二个参数指定的内容来删除。

trim() 是删除整个字符串两边的内容。ltrim() 和 rtrim() 从名字就可以看出来,分别就是删除字符串左边和右边的内容。

格式化字符串

这里的格式化主要指的是将字符串格式化成标准的数字或者是货币相关的内容。

echo number_format('12345.678'), PHP_EOL; // 12,346
echo number_format('12345.678', 1), PHP_EOL; // 12,345.7
echo number_format('12345.678', 2, ',', ' '), PHP_EOL; // 12 345,68

数字格式化一般用得最多的是在保留小数点的情况下的使用。不过除了小数点的保留功能之后,我们使用这个 number_format() 函数还可以指定数字的 千分位分隔符 和 小数分隔符 。

setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', 12345.678), PHP_EOL; // USD12,345.68setlocale(LC_MONETARY, 'zh_CN');
echo money_format('%i', 12345.678), PHP_EOL; // CNY12,345.68setlocale(LC_MONETARY, 'de_DE');
echo money_format('%i', 12345.678), PHP_EOL; // EUR12.345,68

对于货币的格式化来说,最重要的是就是要和当前的国家信息编码相关关联。关于这一块的内容我们在之前讲国际化相关的文章中也有过深入的学习,大家可以翻翻之前的文章。

解析查询字符串

最后就是解析查询字符串的函数。这个查询字符串其实就是我们使用 GET 方式传递数据的时候跟在 url 中问号后面的内容。

$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first, PHP_EOL; // value
echo $arr[0], PHP_EOL; // foo bar
echo $arr[1], PHP_EOL; // baz

在默认情况下,这个 parse_str() 函数会将这个查询字符串中的内容直接解析到全局变量中,也就是将每个参数变成一个变量解析出来。这种能力其实并不是一个好的能力,毕竟解析出来的东西不是我们可控的,而用户如果传递了一些不安全的参数,正好又是我们后面要用到的变量的话,这就非常危险了。所以说,更好的办法是使用它的第二个参数,给它一个引用变量,这样解析出来的内容就会全都放在这个引用变量中并保存成一个数组了。

parse_str($str, $output);
print_r($output);
// Array
// (
//     [first] => value
//     [arr] => Array
//         (
//             [0] => foo bar
//             [1] => baz
//         )// )

总结

关于字符串相关的函数我们就介绍到这里,当然,还有很多内容是我们没有讲到的,不过那些函数也是相对来说非常少用到的内容了。大家可以自己多去官方文档上查阅学习,接下来,我们要学习到的又是另一块 PHP 中非常重要的大功能函数的使用,那就是数组相关函数的学习。这个也是重中之重的内容,千万不要错过了哦。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/03/source/9.%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%93%8D%E4%BD%9C%E5%87%BD%E6%95%B0%EF%BC%88%E4%B8%89%EF%BC%89.php

参考文档:

https://www.php.net/manual/zh/ref.strings.php

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础 -- 运行安全之ASLR的作用与实现方式

Linux ARM ASLR 的作用与实现方式 简介 ASLR&#xff08;Address Space Layout Randomization&#xff0c;地址空间布局随机化&#xff09;是一种安全技术&#xff0c;用于防止攻击者通过利用已知的内存地址来进行攻击。它通过随机化进程的内存地址空间布局&#xff0c;使得内…

docker-cli nerdctl ctr crictl容器命令比较

一、docker-cli、nerdctl 和 ctr 以及 crictl 介绍 docker, nerdctl 和 ctr 和 crictl 都是用于容器管理的命令行工具&#xff0c;但它们在设计目的、使用场景和技术栈上有所不同。下面分别对这四个工具进行介绍&#xff0c;并指出它们之间的主要差异。 1.1、Docker CLI Doc…

Ionic 安装指南

Ionic 安装指南 Ionic 是一个强大的开源框架,用于开发跨平台的移动应用程序。它结合了 Angular、React 或 Vue 的强大功能,允许开发者使用网页技术构建高性能的移动应用。本指南将详细介绍如何在不同操作系统上安装 Ionic,并开始您的第一个 Ionic 项目。 系统要求 在开始…

【CPO-TCN-BiGRU-Attention回归预测】基于冠豪猪算法CPO优化时间卷积双向门控循环单元融合注意力机制

基于冠豪猪算法CPO&#xff08;Correlation-Preservation Optimization&#xff09;优化的时间卷积双向门控循环单元&#xff08;Bidirectional Gated Recurrent Unit&#xff0c;BiGRU&#xff09;融合注意力机制&#xff08;Attention&#xff09;的回归预测需要详细的实现和…

微调 Florence-2 - 微软的尖端视觉语言模型

Florence-2 是微软于 2024 年 6 月发布的一个基础视觉语言模型。该模型极具吸引力&#xff0c;因为它尺寸很小 (0.2B 及 0.7B) 且在各种计算机视觉和视觉语言任务上表现出色。 Florence 开箱即用支持多种类型的任务&#xff0c;包括: 看图说话、目标检测、OCR 等等。虽然覆盖面…

Elasticsearch索引管理和生命周期管理

在大数据和搜索引擎技术日益成熟的今天&#xff0c;Elasticsearch作为一款基于Lucene构建的开源搜索引擎&#xff0c;凭借其强大的全文搜索能力、分布式架构以及可扩展性&#xff0c;在日志分析、实时监控、应用搜索等多个领域得到了广泛应用。然而&#xff0c;随着数据量的不断…

前缀和算法——部分OJ题详解

&#xff08;文章的题目解释可能存在一些问题&#xff0c;欢迎各位小伙伴私信或评论指点&#xff08;双手合十&#xff09;&#xff09; 关于前缀和算法 前缀和算法解决的是“快速得出一个连续区间的和”&#xff0c;以前求区间和的时间复杂度是O(N)&#xff0c;使用前缀和可…

【精品资料】大数据可视化平台数据治理方案(626页WORD)

引言&#xff1a;大数据可视化平台的数据治理方案是一个综合性的策略&#xff0c;旨在确保大数据的质量、安全性、可访问性和合规性&#xff0c;从而支持高效的数据分析和可视化过程。 方案介绍&#xff1a; 大数据可视化平台的数据治理方案是一个综合性的策略&#xff0c;旨在…

Netty HTTP

Netty 是一个高性能的异步事件驱动的网络应用程序框架&#xff0c;支持快速开发可维护的高性能协议服务器和客户端。它广泛应用于开发网络应用程序&#xff0c;如服务器和客户端协议的实现。Netty 提供了对多种传输类型的抽象&#xff0c;如 TCP/IP 和 UDP/IP 等&#xff0c;使…

微软的vscode和vs2022快捷键官网链接

vscode官方文档:https://code.visualstudio.com/docs/ vscode快捷键官方文档:https://code.visualstudio.com/docs/getstarted/keybindings vs2022官方文档:https://learn.microsoft.com/zh-cn/visualstudio/ide/?viewvs-2022 vscode快捷键官方文档:https://learn.microsoft.c…

Qt Style Sheets

样式表语法 Qt 样式表术语和语法规则几乎与 HTML CSS 的相同。如果您已经了解 CSS&#xff0c;您可能可以快速浏览此部分。 样式规则 样式表由一系列样式规则组成。样式规则由选择器和声明组成。选择器指定哪些小部件受该规则影响&#xff1b;声明指定应在小部件上设置哪些属性…

python基础知识点(蓝桥杯python科目个人复习计划70)

继续打基础&#xff0c;爬虫部分随笔 第一题&#xff1a;特别数的和 题目描述&#xff1a; 小明对数位中含有2、0、1、9的数&#xff08;不包含前导0&#xff09;很感兴趣&#xff0c;在1到40中这样的数共有28个&#xff0c;它们的和是574。 请问在1到n中&#xff0c;这样的…

提高Java程序效率:ImmutableList、Stream API 和 JSON序列化实战指南

常用列表构建方法&#xff1a; 1.ImmutableList.of() &#xff1a; 静态方法、不可变的列表 可以接受任意数量的参数&#xff0c;并将它们作为元素添加到新创建的列表中&#xff0c;但是一旦创建&#xff0c;集合的内容就不能被改变。在多线程环境中非常有用&#xff0c;因为…

Linux编程(通信协议---udp)

UDP&#xff08;用户数据报协议&#xff09;是一种无连接的网络协议&#xff0c;主要用于快速传输数据。以下是UDP协议的一些主要特点&#xff1a; 1. **无连接**&#xff1a;UDP是无连接的协议&#xff0c;这意味着在数据传输之前不需要建立连接。每个UDP数据包都是独立的&am…

OpenSearch分析CloudTrail日志的实用案例

在AWS环境中,CloudTrail日志提供了宝贵的洞察,而OpenSearch则为分析这些日志提供了强大的工具。本文将介绍15个使用OpenSearch分析CloudTrail日志的实用案例,帮助您更好地理解和管理AWS环境。 1. 监控用户登录活动 查询: eventName: "ConsoleLogin" 这个查询可…

Spark的动态资源分配算法

文章目录 前言基于任务需求进行资源请求的整体过程资源申请的生成过程详解资源申请的生成过程的简单例子资源调度算法的代码解析 申请资源以后的处理&#xff1a;Executor的启动或者结束对于新启动的Container的处理对于结束的Container的处理 基于资源分配结果进行任务调度Pen…

把关键字当作列名 不报错的方法 (数据库)

解决方法&#xff1a; 把新字段名加上双引号 ALTER TABLE 表名 RNAME COLUMN 旧列名 TO “新列名”在这个语句中&#xff0c;“新列名” 被双引号包围&#xff0c;这样数据库就能识别它作为一个标识符(例如列名)&#xff0c;而不是一个 SQL 关键字。

Django相关的基本操作

Django是一个高级的Python Web框架&#xff0c;它鼓励快速开发和干净、实用的设计。以下是Django使用方法的基本步骤&#xff0c;涵盖了从安装到项目部署的整个过程&#xff1a; 1. 安装Django 首先&#xff0c;你需要在你的Python环境中安装Django。可以通过pip命令来安装&a…

win10删除鼠标右键选项

鼠标右键菜单时&#xff0c;发现里面的选项特别多&#xff0c;找一下属性&#xff0c;半天找不到。删除一些不常用的选项&#xff0c;让右键菜单变得干净整洁。 1、按下键盘上的“winR”组合按键&#xff0c;调出“运行”对话框&#xff0c;输入“regedit”命令&#xff0c;点击…

探索Transformer:依存句法分析的新纪元

探索Transformer&#xff1a;依存句法分析的新纪元 依存句法分析是自然语言处理&#xff08;NLP&#xff09;领域中的一项基础任务&#xff0c;它旨在揭示句子中词语之间的依存关系。近年来&#xff0c;Transformer模型以其卓越的性能在依存句法分析领域引起了一场革命。本文将…