200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > php strpos 区分大小写么? php查找字符串strpos() stripos() strrpos() strripos()的区别

php strpos 区分大小写么? php查找字符串strpos() stripos() strrpos() strripos()的区别

时间:2021-03-06 13:45:17

相关推荐

php strpos 区分大小写么? php查找字符串strpos()  stripos() strrpos()  strripos()的区别

strpos – 查找字符串首次出现的位置,strpos() 函数对大小写敏感(区分大小写)。

stripos – 查找字符串首次出现的位置(不区分大小写)

strrpos – 计算指定字符串在目标字符串中最后一次出现的位置(区分大小写)

strripos – 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)

strpos

查找字符串首次出现的位置mixedstrpos(string$haystack,mixed$needle[,int$offset=0])1

在 PHP7 源码中该函数实现在string.c文件的1950行附近

参数说明

haystack在该字符串中进行查找。needle如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。offset如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计和 strrpos()、 strripos()不一样,这个偏移量不能是负数。

返回值

成功:返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)失败:如果没找到 needle,将返回 FALSE。

注意字符串位置是从0开始,而不是从1开始的

此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值应使用 === 运算符或 !== 来测试此函数的返回值

示例<?php

//忽视位置偏移量之前的字符进行查找

$newstring='abcdefabcdef';

$pos=strpos($newstring,'a',1);//$pos=7,不是0

?><?php

$mystring='abc';

$findme='a';

$pos=strpos($mystring,$findme);//$pos=0

//注意这里使用的是===。简单的==不能像我们期待的那样工作,

//因为'a'是第0位置上的(第一个)字符。

if($pos===false){

echo"没有找到字符串'$findme'";

}else{

echo"字符串'$findme'在字符串'$mystring'中被发现"

echo"在其中的位置是$pos";//$pos=0

}

?><?php $haystack='MynameisJay,age28';$needle=8;

var_dump(strpos($haystack,$needle));/*

结果是false,因为这里的$needl是数字8,不是字符8,PHP会转成相应的ASII

8的ASII是^H,自然是找不到的

*/?><?php $haystack='MynameisJay,age28';$needle=97;

var_dump(strpos($haystack,$needle));/*

结果是4,因为97的ASII是字母a,

*/?>

stripos

查找字符串首次出现的位置(不区分大小写)mixedstripos(string$haystack,string$needle[,int$offset=0])1

在 PHP7 源码中该函数实现在string.c文件的行附近该函数与 strpos 唯一的区别就是不区分大小写。其他可参考strpos<?php $haystack='MynameisJay,age28';$needle='A';

var_dump(stripos($haystack,$needle));/*

结果是4

*/?>

$findme='a';

$mystring1='xyz';

$mystring2='ABC';

$pos1=stripos($mystring1,$findme);

$pos2=stripos($mystring2,$findme);

//'a'当然不在'xyz'中

if($pos1===false){

echo"Thestring'$findme'wasnotfoundinthestring'$mystring1'";

}

//注意这里使用的是===。简单的==不能像我们期望的那样工作,

//因为'a'的位置是0(第一个字符)。

if($pos2!==false){

echo"Wefound'$findme'in'$mystring2'atposition$pos2";

}

?>

strrpos

计算指定字符串在目标字符串中最后一次出现的位置mixedstrrpos(string$haystack,mixed$needle[,int$offset=0])1

在 PHP7 源码中该函数实现在string.c文件的2068行附近

参数说明

haystack在该字符串中进行查找。needle如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。offset如果提供了此参数,搜索会从字符串该字符数的起始位置开始统计,可以是负数

返回值

成功:返回 needle 存在于 haystack 字符串起始的位置(独立于 offset)失败:如果没找到 needle,将返回 FALSE。

注意字符串位置是从0开始,而不是从1开始的

此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值应使用 === 运算符或 !== 来测试此函数的返回值

示例<?php

$foo="012345678901234567890123456789";

//从尾部第3个位置开始查找,

//结果:int(27)

var_dump(strrpos($foo,'7',-3));

//从尾部第4个位置开始查找,

//结果:int(17)

var_dump(strrpos($foo,'7',-4));

//从第20个位置开始查找

//结果:int(27)

var_dump(strrpos($foo,'7',20));

//结果:bool(false)

var_dump(strrpos($foo,'7',28));

?>

可能有同学对上面的-3那个例子看不明白

为什么上面的-3,查找到的'7',最后出现的位置仍然是27,而不是17

这个-3该怎么计算呢?

其实很简单,我们观察一下$foo,长度为30,在C语言中用字符数组来存的话就是0到29

在PHP内部是使用$foo的长度30加上偏移-3等于27,然后在字符数组0到27中来查找。

0到27也就是字符串0123456789012345678901234567,所以为'7'最后一次出现的位置是27

strripos

计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)mixedstrripos(string$haystack,mixed$needle[,int$offset=0])1

在 PHP7 源码中该函数实现在string.c文件的2137行附近该函数与 strrpos 唯一的区别就是不区分大小写。其他可参考strrpos<?php

$haystack='ababcd';

$needle='aB';

$pos=strripos($haystack,$needle);

if($pos===false){

echo"Sorry,wedidnotfind($needle)in($haystack)";

}else{

//结果找到了,位置为2

echo"Congratulations!\n";

echo"Wefoundthelast($needle)in($haystack)atposition($pos)";

}

?>

PHP strripos note #3

Suppose you just need a stripos function working backwards expecting that strripos does this job, you better use the following code of a custom function named strbipos:

functionstrbipos($haystack="",$needle="",$offset=0) {

// Search backwards in $haystack for $needle starting from $offset and return the position found or false

$len=strlen($haystack);

$pos=stripos(strrev($haystack),strrev($needle),$len-$offset-1);

return ( ($pos===false) ?false:$len-strlen($needle) -$pos);

}

// Test

$body="01234Xy7890XYz456xy90";

$str="xY";

$len=strlen($body);

echo"TEST POSITIVE offset VALUES IN strbipos

";

for ($i=0;$i

echo"Search in [$body] for [$str] starting from offset [$i]: [".strbipos($body,$str,$i) ."]

";

}

?>

Note that this function does exactly what it says and its results are different comparing to PHP 5 strripos function.

PHP strripos note #4

OK, I guess this will be the final function implementation for PHP 4.x versions ( my previous posts are invalid )

if(!function_exists("stripos")){

functionstripos($str,$needle,$offset=0){

returnstrpos(strtolower($str),strtolower($needle),$offset);

}/* endfunction stripos */

}/* endfunction exists stripos */

if(!function_exists("strripos")){

functionstrripos($haystack,$needle,$offset=0) {

if( !is_string($needle) )$needle=chr(intval($needle) );

if($offset

$temp_cut=strrev(substr($haystack,0,abs($offset) ) );

}

else{

$temp_cut=strrev( substr($haystack,0,max( (strlen($haystack) -$offset),0) ) );

}

if( ($found=stripos($temp_cut,strrev($needle) ) ) ===FALSE)returnFALSE;

$pos= (strlen($haystack) - ($found+$offset+strlen($needle) ) );

return$pos;

}/* endfunction strripos */

}/* endfunction exists strripos */

?>

PHP strripos note #5

Oops, I forgot to return "false" if the needle is not found. Here is the proper function.

if(!function_exists("strripos")){

functionstrripos($haystack,$needle,$offset=0) {

if($offset<0){

$temp_cut=strrev(substr($haystack,0,abs($offset) ) );

}

else{

$temp_cut=strrev(substr($haystack,$offset) );

}

$pos=strlen($haystack) - (strpos($temp_cut,strrev($needle)) +$offset+strlen($needle));

if ($pos==strlen($haystack)) {$pos=0; }

if(strpos($temp_cut,strrev($needle))===false){

returnfalse;

}

else return$pos;

}/* endfunction strripos*/

}/* endfunction exists strripos*/

?>

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