Если возможно, используйте только стандартные PHP-функции, такие как substr(), strrpos(), strpos() и т.д.
Как найти второе-последнее появление символа внутри строки?
Ответ 1
Сначала найдите последнюю позицию:
$last = strrpos($haystack, $needle);
if ($last === false) {
return false;
}
Оттуда найдите второе:
$next_to_last = strrpos($haystack, $needle, $last - strlen($haystack) - 1);
Ответ 2
Общее решение для любого числа шагов назад:
function strrpos_count($haystack, $needle, $count)
{
if($count <= 0)
return false;
$len = strlen($haystack);
$pos = $len;
for($i = 0; $i < $count && $pos; $i++)
$pos = strrpos($haystack, $needle, $pos - $len - 1);
return $pos;
}
Ответ 3
С strpos
:
$pos = -1; $last = null; $secondLast = null;
while (($pos = strpos($haystack, $needle, $pos+1)) !== false) {
$secondLast = $last;
$last = $pos;
}
if (!is_null($secondLast)) {
echo 'second last occured on '.$secondLast;
}
Ответ 4
Найти regexp (plz исправить меня, если я ошибаюсь, и как написать его в PHP):
r'x[^x]*x[^x]*$'.replace('x',your_char)
Ответ 5
Я не думаю, что это можно сделать с помощью strrpos, потому что позиция не начинается работайте так, как вы ожидали.
Существует afaik не какой-либо очевидный способ, но эта функция должна это делать. (Не проверен, но я думаю, что он работает).
/** Return the position of the second last needle in haystack or false if nothing is found. I really hate functions with return types that depend on their input, but this function is made to look like the similary php functions (strpos, strrpos and so on) */
// Needle must be a char. If you want it to be a string instead, just substr
// length of needle instead of 1 in this example.
function findSecondLastChar($needle,$haystack) {
$found=0;
for($pos=strlen($haystack)-1;$pos>=0;$pos--) {
if(substr($haystack,$pos,1)==$needle) {
if($found++ == 1)
return $pos;
}
}
// If we reach this, nothing were found
return false;
}