PHP strrpos 第三个参数为负数时到底是什么意思

之前一篇『PHP 是否由某字符串开头』的文章里有提到 strrpos 这个函数,并且此函数性能相当不错。但这里我想对 strrpos 字符串做一些更多的说明,因为我感觉官方文档的描述不太清楚,可能会误导新手。

这篇文章只针对官方文档里对 strrpos 第三个参数的描述:

offset

If specified, search will start this number of characters counted from the beginning of the string. If the value is negative, search will instead start from that many characters from the end of the string, searching backwards.

关于这个参数是正整数的情况也没毛病,关键是对这个参数是负数的描述上。按照文档说法,如果第三参数为负,比如 -1,那么此函数将从字符串末尾往前数 1 位这个位置开始,从后往前找到更靠近末尾的匹配的字符串的位置:

但文档的描述有一个问题没说清楚:如果第三参数为负数,此函数将会把第三参数指定位置后面的字符去掉了再匹配?还是只是从第三参数指定的位置开始匹配。注意这里面可是有细微的差别的哦。

栗子是个好东西,甚多不清楚的事情试试就知道了:

之所以会提出这个问题,是因为这个问题已经误导我好多年了……因为某种机缘巧合突然发现『卧槽,原来是这样?!』。另外我发现 PHP 官方文档下面有的评论里举的例子,看起来也应该是理解错了。比如想获取一个字符串是否为另外一个字符串开头,你根本不需要:

只用

就行了。并且理论上比上面的做法还少匹配好多次,效率更高。

wx pay

CC BY-NC-ND 4.0 PHP strrpos 第三个参数为负数时到底是什么意思 by Chrisyue's Blog is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

发表评论

电子邮件地址不会被公开。

twenty five ÷ = 5