如果我给负偏移,stripos不起作用

时间:2018-07-04 13:23:19

标签: php

在以下代码中,如果我在不给出偏移量的情况下搜索字符位置(使用默认的正索引,从0开始),则打印0

$str = "abcdashboard";
$s = 'a';
$pos = stripos($str,$s);
if($pos !==FALSE){
    echo 'positive: character found'.$pos;
}

但是,如果我使用负索引,则要从最后开始搜索,它将无法正常工作。什么都不打印

$str = "abcdashboard";
$s = 'a';
$neg = stripos($str,$s,-1);
if($neg !==FALSE){

    echo 'negative: character found'.$neg;
    echo "<br>";
}

我从以下内容中找不到

偏移量 如果指定,搜索将从字符串的开头开始计算此数目的字符。如果偏移量为负,则搜索将从字符串的末尾开始计算此数量的字符。

2 个答案:

答案 0 :(得分:3)

stripos() 不会从字符串的末尾开始搜索。它的第三个参数告诉它从哪里开始搜索,但是仍然从该索引开始搜索到字符串的结尾。

-1告诉它仅检查干草堆字符串的最后一个字符(第一个参数)。

如果要从头到尾进行搜索,请尝试strripos()


字符串函数strrchr()strrpos()strripos()的名称中的第二个r来自“ reverse” 。这些函数从指定位置(默认情况下为字符串的结尾)开始向string $needle字符串的开头搜索第二个参数(string $haystack)到第一个参数($haystack)。

因此,他们发现$needle最后出现在$haystack中,这与相似的功能相反,在其名称中没有第二个r的情况下找到了第一次出现。

第三个参数(int $offset)的语义与其他字符串搜索功能相同:正值(和0)从$haystack的开头开始计数,负数值通过从$haystack的末尾开始计数来设置起始位置。

答案 1 :(得分:3)

应该可以。

stripos($str,$s,-4);

将搜索最后4个字符并输出

negative: character found 9