关于 strpos 的问题:如何获得字符串的第二次出现?
我知道这个函数将获得字符串的第一次出现。
但我想要的是第二次出现。
如何去做呢?
我知道这个函数将获得字符串的第一次出现。
但我想要的是第二次出现。
如何去做呢?
我知道这个问题有点旧了,但是这是我写的一个函数,用于获取子字符串的第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
);
}
您需要将搜索开始时的偏移量指定为可选的第三个参数,并通过在第一次出现后直接开始搜索来计算它,方法是将要搜索的内容的长度添加到您找到它的位置。
$pos1 = strpos($haystack, $needle);
$pos2 = strpos($haystack, $needle, $pos1 + strlen($needle));