我想找到一个子字符串的位置,从结束的字符串,但有跳过参数。因此,如果我传递3,它应该跳过前3个匹配并返回第4个匹配的位置(如果没有找到匹配,则返回false
)。
$str = '<h1>First</h1><h1>Second</h1><h1>Third</h1><h1>Fourth</h1>';
echo custom_search($str, '<h1>', 2);
应该返回14。
搜索将从字符串的末尾开始,并将跳过找到的<h1>
的前两个匹配项,并返回下一个匹配<h1>
的位置(该位置相对于字符串的开头)。
正如@RomanHocke在他的评论中所说,你必须在循环中使用strrpos
,在每次迭代中更新offset
参数。
类似这样的内容(它可以工作,尽管它肯定可以改进):
$str = '<h1>First</h1><h1>Second</h1><h1>Third</h1><h1>Fourth</h1>';
var_dump(custom_search($str, '<h1>', 0)); // int(43)
var_dump(custom_search($str, '<h1>', 1)); // int(29)
var_dump(custom_search($str, '<h1>', 2)); // int(14)
var_dump(custom_search($str, '<h1>', 3)); // int(0)
var_dump(custom_search($str, '<h1>', 4)); // bool(false)
var_dump(custom_search($str, 'I am not in the string', 0)); // bool(false)
function custom_search ($str, $substr, $n = 0) {
$offset = 0;
$total_offset = 0;
for ($i=0; $i<=$n; $i++) {
$strrpos = strrpos($str, $substr, $offset);
$str= substr($str, 0, $strrpos);
}
return $strrpos;
}