关于 strpos 的问题:如何获得字符串的第二次出现?

2022-08-30 10:09:17

我知道这个函数将获得字符串的第一次出现。

但我想要的是第二次出现。

如何去做呢?


答案 1

我知道这个问题有点旧了,但是这是我写的一个函数,用于获取子字符串的第X次出现,这可能对其他遇到此问题并偶然发现此线程的人有所帮助。

/**
 * Find the position of the Xth occurrence of a substring in a string
 * @param $haystack
 * @param $needle
 * @param $number integer > 0
 * @return int
 */
function strposX($haystack, $needle, $number) {
    if ($number == 1) {
        return strpos($haystack, $needle);
    } elseif ($number > 1) {
        return strpos($haystack, $needle, strposX($haystack, $needle, $number - 1) + strlen($needle));
    } else {
        return error_log('Error: Value for parameter $number is out of range');
    }
}

或简化版本:

function strposX($haystack, $needle, $number = 0)
{
    return strpos($haystack, $needle,
        $number > 1 ?
        strposX($haystack, $needle, $number - 1) + strlen($needle) : 0
    );
}

答案 2

您需要将搜索开始时的偏移量指定为可选的第三个参数,并通过在第一次出现后直接开始搜索来计算它,方法是将要搜索的内容的长度添加到您找到它的位置。

$pos1 = strpos($haystack, $needle);
$pos2 = strpos($haystack, $needle, $pos1 + strlen($needle));

推荐