目录
【4】substr_compare — 二进制安全比较字符串(从偏移位置比较指定长度)
【1】substr — 返回字符串的子串
作用:
返回字符串 string 由 start 和 length 参数指定的子字符串。
函数:
substr ( string $string , int $start [, int $length ] ) : string
参数:
$string 输入字符串
$start 如果是非负数,返回的字符串从$start开始,位置从0计算。
如果它是负数,返回的字符串从string结尾处向前第start个字符开始。
如果$start大于$string的字符长度,返回False。
$length如果没有提供 length,返回的子字符串将从 start 位置开始直到字符串结尾。
如果提供了正数的 length,返回的字符串将从 start 处开始最多包括 length 个字符。
如果提供了负数的 length,那么 string 末尾处的 length 个字符将会被省略
(若 start 是负数则从字符串尾部算起)。
返回值:
返回提取的子字符串, 或者在失败时返回 FALSE。
echo substr('Hello Tacks!',0),'<br/>';//Hello Tacks! 从第一个字符到到最后
echo substr('Hello Tacks!',6),'<br/>';// Tacks! 从第七个字符到最后
echo substr('Hello Tacks!',6,5),'<br/>';//Tacks 从第七个字符截取五个长度的字符
echo substr('Hello Tacks!',-1),'<br/>';//! 从最后一个字符截取一个
echo substr('Hello Tacks!',-6,5),'<br/>';//Tacks从倒数第六个字符截取五个长度的字符
echo substr('Hello Tacks!',6,-5),'<br/>';//T 从第七个字符开始然后截取的字符后面五个字符也删去
echo substr('Hello Tacks!',-6,-5),'<br/>';//T 从倒数第六个字符开始向后截取同时后面五个字符也删去
echo substr('Hello Tacks!',12),'<br/>';//超出字符串长度,返回false,即没有echo出来东西。
【2】substr_replace— 替换字符串的子串
作用:
substr_replace() 在字符串 string 的副本中将由 start 和可选的 length 参数限定的子字符串使用 replacement 进行替换。
函数:
substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] ) : mixed
参数:
$string 字符串 $replacement替换字符串 $start替换开始位置(正从左边负从右边)
$length 如果设定了这个参数并且为正数,表示 string 中被替换的子字符串的长度。
如果设定为负数,它表示待替换的子字符串结尾处距离 string 末端的字符个数。
如果没有提供此参数,那么它默认为 strlen( string ) (字符串的长度)。
如果 length 为 0,那么这个函数的功能为将 replacement 插入到 string 的 start 位置处。
返回值:
返回结果字符串。如果 string 是个数组,那么也将返回一个数组。
$str = 'Hello world!';
echo $str,'<br/>';//Hello world!
echo substr_replace($str,'Tacks',0),'<br/>';#Tacks 全部替换
echo substr_replace($str,'Tacks',0,0),'<br/>';#TacksHello world! 插入开头的地方
echo substr_replace($str,'Tacks',6,5),'<br/>';#Hello Tacks! 从第七个字符开始替换Tacks原来位置的五个长度的字符
echo substr_replace($str,'Tacks',6,1),'<br/>';#Hello Tacksorld!从第七个字符开始替换Tacks原来位置的一个长度的字符
echo substr_replace($str,'Tacks',6,-1),'<br/>';#Hello Tacks! 从第七个字符开始替换Tacks距离结尾末端一个字符
echo substr_replace($str,'',6,-1),'<br/>';#Hello ! 删除从第七个字符到结尾末端的一个字符
$arr = ["1: AAA","2: AAA","3: AAA"];
print_r(substr_replace($arr,'BBB',3,3));//替换数组中每个单元的第四个字符开始原来位置的三个字符
//Array ( [0] => 1: BBB [1] => 2: BBB [2] => 3: BBB )
【3】substr_count — 计算子字符串出现的次数
作用:
substr_count() 返回子字符串needle 在字符串 haystack 中出现的次数。注意 needle 区分大小写。
函数:
substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) : int
参数:
$haystack 在此字符串中进行搜索。
$needle 要搜索的字符串。
$offset 开始计数的偏移位置。如果是负数,就从字符的末尾开始统计。
$length 指定偏移位置之后的最大搜索长度。
如果偏移量加上这个长度的和大于 haystack 的总长度,则打印警告信息。
负数的长度 length 是从 haystack 的末尾开始统计的。
(7.1.0 开始支持负数的 offset 和 length)
返回值:
该函数返回整型。
备注:
该函数不会计算重叠字符串。
$str = "This is Tacks's code";
echo substr_count($str,'is'),'<br/>';//2 从开始搜索到结束
echo substr_count($str,'is',4),'<br/>';//1 从第五个字符开始向后搜索
echo substr_count($str,'is',4,1),'<br/>';//0 从第五个字符开始向后搜索1一个字符
echo substr_count($str,'is',4,20),'<br/>';//4+20 大于24 生成警告
echo substr_count('TacksTacksTacks','TacksTacks');//1 不统计重复字符
【4】substr_compare — 二进制安全比较字符串(从偏移位置比较指定长度)
作用:
substr_compare() 从偏移位置 offset 开始比较 main_str 与 str,比较长度为 length 个字符。
函数:
substr_compare ( string $main_str , string $str , int $offset [, int $length [, bool $case_insensitivity = FALSE ]] ) : int
参数:
$main_str 待比较的第一个字符串 $str待比较的第二个字符串
$offset 比较开始的位置。如果为负数,则从字符串结尾处开始算起。
$length 比较的长度。默认值为 str 的长度与 main_str 的长度减去位置偏移量 offset 后二者中的较大者。要大于等于0,否则会报错。
$case_insensitivity 为 TRUE,比较将不区分大小写。默认FALSE
返回值:
如果 main_str 从偏移位置 offset 起的子字符串小于 str,则返回小于 0 的数;
如果大于 str,则返回大于 0 的数;
如果二者相等,则返回 0。
echo substr_compare('Tacks','Ta',0,2),'<br/>';//0相等
echo substr_compare('Tacks','cks',2,3),'<br/>';//0 相等
echo substr_compare('Tacks','ta',0,2),'<br/>';//-1 从第一个字符开始比较 大写T的ascii码小于小写t 返回-1
echo substr_compare('ta','Tacks',0,2),'<br/>';//1 从第一个字符开始比较 小写t大于大写T的ascii码 返回1
echo substr_compare('Tacks','s',5,1),'<br/>';//长度溢出报错
【小结】
- substr($string,$start,$length)处理$string原始字符串,截取从$start开始位置到$length的长度的字符。返回截取的字符。
- substr_replace($string,$replacement,$start,$length)处理原始$string字符串,从$start开始长度$length的字符替换为$replacement字符串。返回替换后的字符,也可以替换数组。
- substr_count($haystacks,$needle[,$offset,$length])在$haystacks原始的字符串中,偏移$offset后,搜索范围长度为$length,然后看搜索$needle字符串出现次数。返回子字符串次数。
- substr_compare这个函数比较两个字符串中子串的大小,根据ASCII。