PHP处理字符串相关函数

简介:php读取某个位置的字符串,php字符串截取,某个字符串是否存在字符串中

字符串几乎是所有面试环节一定会问道的问题,然而有些字符串函数我们经常会忘记。主要是因为平时开发我都依赖PHP Storm开发工具,我们只需要输入首字母,开发工具就会给我们非常好的提示,导致我们忘记一些函数的全称,今天我们就来总结一下关于字符串的操作函数。

一. 读取某个位置的字符串

1.1 通过索引的方式读取

这种方式本身就有缺陷,如果字符串中有中文,你会发现中这种方式只读取了一半或者说是获取到的是一个无法打印的空字符串,但是如果我们使用 strlen() 获取字符串的长度时,返回的是: 1 ,具体的可以从下方打印结果中可以看出:

$str = 'acdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';
echo $str[0]; // 打印:a

var_dump($str[26]); //string(1) ""

echo strlen($str[26]); //打印:1

1.2 字符串截取

对于字符串截取PHP提供了两个函数:substr 和 mb_substr 。这两个函数的参数及意义是一致,没有区别。主要区别在于截取的字符串本身。

substr() 函数只能截取不含中文的字符串,否则会和上面的索引获取字符串一样,返回空字符串。具体用法和表现如下:

$str = 'acdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';

echo substr($str,10,1); //打印:f

var_dump(substr($str,26,1)); //打印:string(1) ""

echo strlen(substr($str,26,1)); //打印:1

如果想要解决字符串中有中文的问题,大家可以使用 mb_substr() 函数进行截取,具体用法和 substr() 函数一样。具体操作如下:

<?php
$str = 'acdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';

echo mb_substr($str,10,1); //打印:f

echo mb_substr($str,26,1); // 打印:和

mb_substr  substr 函数参数描述:

参数一:待截取的字符串

参数二:截取的开始位置

参数三(可选):截取的长度,如果没有长度,默认截取到字符串末尾

二. 获取字符串的长度

PHP提供了 strlen() 函数获取字符串的长度,具体用法如下:

$str = 'acdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';

echo strlen($str); //打印:75

注意:php在UTF-8编码下,一个汉字占3个字节,gbk编码下只占2个字节。我们一般都是UTF-8编码。

一个字幕暂用一个字符,但是不同编码格式下,一个中文暂用的字符数不同,一般都是UTF-8编码。不同编码下可以使用strlen查看具体暂用多少个字符数:

$str = 'acdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';
echo strlen(mb_substr($str,26,1)); //打印:3

三. 某个字符串出现的位置

字符串出现的位置分两种情况,即首次出现的位置和最后依次出现的位置

PHP对于首次出现的位置问题,给我们提供了2个函数,分别是:strpos()  stripos() 。这两个函数主要是判断是否区分大小写

3.1 区分大小写查找字符首次出现的位置

$str = 'acDdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';

echo strpos($str,'d'); //打印:3

3.2 不区分大小写查找字符首次出现的位置

$str = 'acDdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfd';

echo stripos($str,'d'); //打印:2

对于最后一次出现的位置,PHP也提供了两个函数:strrpos()  strripos() 。和上面的这两个函数的区别一样,都是对大小写是否敏感

3.3 区分大小写查找字符最后出现的位置

$str = 'acDdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfdD';

echo strrpos($str,'d'); //打印:75

3.4 不区分大小写查找字符最后出现的位置

$str = 'acDdsfvsgtrfehtejt4543的萨瓦过热和你v发电收入和北方的safvdbfdD';

echo strripos($str,'d'); //打印:76

四. 字符串替换

对于字符替换,PHP提供了很多函数,有区分大小写的,也有查找替换,还有按索引位置的方式进行替换,我们这里以日常工作中经常使用的函数为例

4.1 查找替换

str_replace() 函数查找字符并替换新字符。这个函数会将字符串中查找到的符合条件的所有字符都替换成新字符,具体表现如下:

$str = 'acDdsfvsgtrfehtejt4543safvdbfdD';

echo str_replace('d','W',$str); 
// 打印结果:acDWsfvsgtrfehtejt4543safvWbfWD

注意:索引位置3的d 及 其他位置的d 都被替换了

参数一:查找的字符

参数二:替换的新字符

参数三:待查找的字符串

参数四(可选):参数四必须是一个变量,用于接受替换的次数即查找的字符串一共有多少个

str_replace() 函数是区分大小写的,如果需要不区分大小写,可以使用 str_ireplace() 函数。用法和上面的 str_replace() 函数一样

4.2 根据索引位置替换新的字符

substr_replace() 函数用于替换指定索引位置的字符。具体用法如下:

$str = 'acDdsfvsgtrfehtejt4543safvdbfdD';

echo substr_replace($str,'d',2,1); //打印:acddsfvsgtrfehtejt4543safvdbfdD

echo $str; //打印:acDdsfvsgtrfehtejt4543safvdbfdD

参数一:待处理字符串

参数二:待替换的新字符

参数三:替换的开始索引位置

参数四(可选):替换的长度,默认为null。如果值为0或者null时,会直接将开始位置到最后一个字符串一起替换

4.3 格式化填充字符串

在一些业务逻辑处理时,我们可能需要先定义一个字符串,在把字符串中某些特殊字符替换成自己想要字符,例如下方代码中将某个名称填充到字符串中:

$str = 'hello,my name:%s,who your name';
echo sprintf($str,'小明'); //打印结果:hello,my name:小明,who your name

在一些特殊场景中我们可能需要将一个浮点数格式化填充到某个字符串中。例如价格需要以两位数的方式显示,此时就可以使用【%.2f】的方式指定格式化结果:

$str = 'The price of apples:¥%.2f';
echo sprintf($str,15); //打印结果:The price of apples:¥15.00

关于字符串格式化的标识,大家可以参考官方文档

五. 字符串拆分和拼接

5.1 字符串拆分成数组

explode() 函数可以将一个有特殊规律的字符串拆分成数组。它还可以规定拆分的数量限制,具体表现如下

<?php
$str = 'java|go|php|js|python';
var_dump(explode('|',$str));
/**
 * 打印结果:
 * array(5) {
        [0]=>
        string(4) "java"
        [1]=>
        string(2) "go"
        [2]=>
        string(3) "php"
        [3]=>
        string(2) "js"
        [4]=>
        string(6) "python"
    }
 */
//限定拆分的数量
var_dump(explode('|',$str,2));
/**
 * 打印结果:
 * array(2) {
        [0]=>
        string(4) "java"
        [1]=>
        string(16) "go|php|js|python"
    }
 */

参数一:用于拆分的分隔符

参数二:待处理字符

参数三(可选):拆分的数量限制。默认拆分到最后一个符合条件的字符

如果字符串是一个没有规律的字符串,我们可以按固定长度进行拆分。PHP提供了 str_split() 函数,具体使用如下:

$str = 'java|go|php|js|python';
var_dump(str_split($str,8));
/**
 * 打印结果:
 * array(3) {
        [0]=>
        string(8) "java|go|"
        [1]=>
        string(8) "php|js|p"
        [2]=>
        string(5) "ython"
    }
 */

参数一:待处理字符串

参数二(可选):拆分的长度。默认为1

5.2 将数组拼接成字符串

字符串与字符串之间可以使用 . 号进行拼接,例如下方代码:

$str1 = 'java';
$str2 = 'PHP';
echo $str1.$str2; //打印结果:javaPHP

PHP提供了一个 implode() 函数将数组按固定规则进行拼接。具体使用方法如下:

$arr = ['java','go','php','js','python'];
echo implode(',',$arr); //打印结果:java,go,php,js,python

参数一:待处理数组

参数二(可选):分隔符。默认为空字符串

六 过滤器过滤字符串

PHP提供了一个filter_val函数用于过滤字符串,过滤成功返回字符串后的内容,失败返回false

6.1 判断字符串是否IP地址

$txt = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
$res = filter_var($txt, FILTER_VALIDATE_IP);
echo $res?'有效的IP地址':'无效IP地址';

注意:filter_var会删除所有字符,除了参数二定义过滤器的规则内容

6.1.2 是否为ipv6地址

$txt = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
$res = filter_var($txt, FILTER_VALIDATE_IP,FILTER_FLAG_IPV6);
echo $res?'有效的IPV6地址':'无效IPV6地址';

filter_val删除所有字符,除了参数二规定的内容。参数三是在参数二的基础上进行规则描述。上面参数二规定排除IP地址的正则,参数三是将参数进行更细致的优化

6.1.2 是否为ipv4地址

$txt = '2001:0db8:85a3:0000:0000:8a2e:0370:7334';
$res = filter_var($txt, FILTER_VALIDATE_IP,FILTER_FLAG_IPV4);
echo $res?'有效的IPV4地址':'无效IPV4地址';

6.2 判断是否为有效的邮箱

$txt = 'someone@example....com';
$res = filter_var($txt,FILTER_VALIDATE_EMAIL);
echo $res?'有效的邮箱地址':'无效邮箱';

6.3 判断字符串是否为url

$txt = 'https://www.motui8.cn/article/detail/1/148';
$res = filter_var($txt, FILTER_VALIDATE_URL);
echo $res?'是url':'无效url';

6.4 判断字符串是否为整数值

$txt = '148a';
$res = filter_var($txt, FILTER_VALIDATE_INT);
echo $res?'字符串为是整数值':'字符串不是整数值';

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1