PHP中strchr、strrchr、strpos、strrpos区别

1、strchr(同strstr)

      strchr(string $haystack , mixed $needle [, bool $before_needle = false ] )查找字符串在指定字符串中的首次出现

      返回从第一次出现的位置到haystack 结束的字符串或false(没有找到needle)

      $haystack  被查找的字符串

      $needle   要查找的字符串(如果不是字符串,将被转化成整型并且作为字符的序号来使用)

      $before_needel  控制返回结果,如果为true返回第一次出现到haystack 开始的字符串(不包含needle)

      示例:

                strchr('hello world!','wor')    返回world!

                strchr('[email protected]','@',true)  返回name

2、strrchr

     strrchr(string $haystack , mixed $needle)查找字符串在指定字符串中的最后一次出现

      返回最后一次出现的位置到haystack 结束的字符串或false(没有找到needle)

      $haystack  被查找的字符串

      $needle   要查找的字符串(如果不是字符串,将被转化成整型并且作为字符的序号来使用)

      示例:

                strrchr('hello world world!','world')  返回world!

3、strpos

     strpos(string $haystack , mixed $needle [, int $offset = 0 ])查找字符串在指定字符串中首次出现的位置

     返回字符串 haystack 中 needle 最后一次出现的数字位置(如果$offset为正数,从左边第0个开始,如果为负数,从右边第1个开始),如果没找到needle,返回false

      $haystack  被查找的字符串

      $needle   要查找的字符串(如果不是字符串,将被转化成整型并且作为字符的序号来使用)

      $offset  如果提供了此参数,搜索会从字符串偏移了|$offset|后开始统计(控制从字符串什么位置开始查找)。如果为负数,表示从后向前开始数|$offset|后(可以理解为最大匹配到从右边第$offset位,不是删除的意思),查找字符串第一次出现的位置。

      注意:strpos函数的$offset参数在PHP7.1以后生效

      示例:

                strpos('hello world world','wor')   返回6//从0开始数,w字符为第6位

                strpos('hello world world','wor',10)  返回12//从第10个开始数,w字符为第12位(第二个w)

                strpos('hello world world','w',-12)  返回false//从右边开始数,数12位后(从1计数),再查找,返回false

4、strrpos

     strpos(string $haystack , mixed $needle [, int $offset = 0 ])查找字符串在指定字符串中最后一次出现的位置

     返回字符串 haystackneedle 最后一次出现的数字位置(如果$offset为正数,从左边第0个开始,如果为负数,从右边第1个开始),如果没有找到返回false

      $haystack  被查找的字符串

      $needle   要查找的字符串(如果不是字符串,将被转化成整型并且作为字符的序号来使用)

      $offset  或许会查找字符串中任意长度的子字符串。负数值将导致查找在字符串结尾处开始的计数位置处结束。

      示例:

              strrpos('AAABBBCCCDDD','DDD') //返回9,最后一次出现的位置为9

              strrpos('AAABBBCCCDD','DDD')//返回false,指定字符串中没有字符串'DDD'

             strrpos('AAABBBCCCDDDD','DDD',-2)//返回10,最大匹配到从有边数第2个,不会再进行匹配(不是删除最后两个D,如果是这样的话,匹配不到DDD,会返回false)

             strrpos('AAABBBCCCDDDD','DDD',-4)//返回9,最大匹配到从有边数第2个,不会再进行匹配

       总结:如果只是想判断$needle是否存在于$haystack中,使用strpos或strrpos,因为它速度更快,耗费内存更少

                 可以使用strrpos($haystack,$needle,-strlen($haystack))用于查找$needle是否位于$haystack开头,返回值应该用===比较,因为如果返回0和false在==时效果相同(PHP7.1以下strpos不支持$offset参数)



猜你喜欢

转载自blog.csdn.net/marco__/article/details/80681302