700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > php字符串函数(1)长度计算 查找 截取

php字符串函数(1)长度计算 查找 截取

时间:2023-01-15 19:55:45

相关推荐

php字符串函数(1)长度计算 查找 截取

1、字符串长度函数:

(1)、strlen():计算 字符串中 字节 的长度;

(2)、mb_strlen():根据字符编码,计算 字符串中字符 的个数;如果没有第二个参数(字符编码类型),则使用内部字符编码;

(3)、mb_internal_encoding():设置/获取内部字符编码,echomb_internal_encoding();得到的内部字符编码为ISO-8859-1(单字节);

<?php// utf-8 格式下编码;$str = 'hello world!';$sss = '中华民国';echo mb_strlen($str);// 12; 英文,12个 字符数;echo mb_strlen($sss,'utf-8'); // 4; utf-8 字符编码下,字符串 $sss的 字符 个数是 4; 在utf-8的格式下进行编辑的;echo mb_strlen($sss); // 12;这个是为什么呢? 初步理解为:没有第二个参数,使用的是默认字符编码,ISO-8859-1是单字节编码,12个字节数(4个中文字符占用12个字节);得出12个字符;echo mb_strlen($sss,'gbk'); // 6; 第二个参数是'gbk',为什么不是4呢?而不是6? 后续重点再回头理解;?>

2、字符串查找函数:字符串(str)中是否存在???(第二个参数)。从哪里开始找??(第三个参数);

(1)strpos():查找 目前字符串 在 指定字符串 中 第一次出现的位置;

注意:由于字符串的下标是从数字 “0”开始的,所以第一次出现的位置 有可能是0,故判断存在不存在的时候,条件表达式应为:if(strpos()!== false);

<?php$str = 'hello this is lilei,he is a fine boy';echo strpos($str,'he'); // he 第一次出现的位置 是 0;echo strpos($str,'is'); // is 第一次出现的位置 是 8;echo strpos($str,'is',9); // is 第2次出现的位置 是 11; 第三个参数 “9” 表示从第9的位置开始查找; 如果为 “-9”时候,则从末尾开始数,第9个位置开始查找;?>

(2)、strrpos():查找 目前字符串 在 指定字符串 中 最后一次出现的位置;r(right) 右边的意思,即最后一次,右边第一次;

(3)、stripos():首次出现时的位置(不区分大小写);strripos():最后一次出现时的位置(不区分大小写);

<?php// 计算中 查询字符串 在 目标字符串中 出现的次数; 也可以直接用内置函数:substr_count();$str = 'hello this is lilei,he is a fine boy';$substr = 'is';function subnum($str,$substr){$strlens = strlen($str); // 计算目标字符串的长度;$substrlens = strlen($substr); // 计算 查询 字符串 的长度;if($substrlens > $strlens){return 0;}for($sum = 0,$offset = 0;($offset = strpos($str,$substr,$offset)) !== false; $offset += $substrlens, $sum++){// offset是偏移量,这里表示子字符串在字符串中出现的位置;// 所以,$offset(出现的位置)!==false 是永远成立的;即:数字 !== false;// $offset < $length;这个是恒成立的,查询的字符出现的位置,永远小于字符串长度;//注意:1、此for循环语句内部可以没有语句,第一个分号前表示初始化;第二个分号前表示成立的条件;第二个分号后,表示成立后,执行的语句;//注意:2、($offset = strpos($str,$substr,$offset)) !== false;中,一定要设置$offset = strpos($str,$substr,$offset);如果只设置strpos($str,$substr,$offset)) !== false的时候,会出错,这样只会从(0+子字符串长度)+字串长度;而不是从查询到的位置+字串长度了;//strpos($str,$substr,$offset) 他查询到 得出的值(位置)先赋给$offset,改变$offset他的初始偏移位置(查询到的位置+子字符串位置),然后再次新的起始位置查询;}return $sum;}echo subnum($str,$substr); // is 出现了 3 次在$str字符串中;echo substr_count($str,$substr); // 通过内置函数计算,输出的结果 同样为 3;?>

3、字符串 截取 函数:

(1)、substr():返回字符串的一部分; 从哪开始截,截几个; 是按照字节来进行计算截取的;

<?php$str = 'fdghfhjgh';echo substr($str,2,-5); //结果为“gh” ;从哪开始截取,截几个,若没有第三个参数则截取到末尾,若参数为负数,则从右边末尾开始计算;倒数第几个开始截,截取到哪(省略、舍弃几个);?>

注意:此substr函数中第三个参数,即length(截取几个/截取到哪),如果设置成0,false或者是null的时候,则返回空字符串;这一点和数组 截取 函数 array_slice ()有些区别,array_slice()函数的第三个参数length(截取几个/截取到哪)的默认值是NULL,即:此参数如果没有实参赋值的时候,则取其默认值NULL;一直截取到末尾表示;

(2)、strstr():查找字符串的在首次原始字符串中首次出现,并返回字符串的一部分;字符串中是否存在?

stristr():忽略大小写;

<?php$sss = '我是一个中国人';$str = 'sdfs dgfddfh f';echo strstr($sss,'一个'); // 一个中国人;echo strstr($str,'fs',TRUE); // sd // 注意:第三个形式参数默认值是FALSE,如果不设置第3个参数,则返回后一部分字符串,如果设置了实参TRUE,则返回 第一次出现 的 前 一部分字符串;?>

(3)、strrchr():字符在字符串中最后一次出现(从右边看,第一次);

<?php$str = 'sdfs dgfddx1x00fh fsdfs dgfddx1x00fh f';echo strrchr($str,'00'); // 0fh f ; 注意:strrchr()是针对指定的 ’字符‘(没有串)来进行匹配操作的;如果不是一个字符,则使用第一个字符; 这个是和strstr第一个不一样的地方;// '00'是个字符串,不是一个字符,则会使用第一个字符:即'0'; 所以此语句相当于:echo strrchr($str,'0');echo strrchr($str,'1x'); // 1x00fh f// 注意:此函数和strstr第2个不同的地方在于:没有第3个默认值是FALSE的参数,即,不能返回字符的前一部分;可以通过字符串反转函数strrev()来实现;?>

<?php$str = 'sdfs dgfddx1x00fh fsdfs dgfddx1x00fh f';echo strrchr($str,'1'),'<br/>'; // 1x00fh f;echo strrev(strstr(strrev($str),'1')); // sdfs dgfddx1x00fh fsdfs dgfddx1 ,通过字符串反转strrev()函数,可以得出其 字符 位置的前一部分;?>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。