strrpos в PHP находит последнюю позицию символа вместо этого?

$string = "01234567890*****12345678901234567890*";  
echo strrpos($string,'*****');

почему это возвращает 36, а не 15? (нажмите здесь для теста)

от php.net
strrpos - найти положение последнего вхождения подстроки в строке

что я упускаю???
Спасибо!

устранение: используя ответы ниже, я предоставил альтернативу PHP4

$haystack = "01234567890*****12345678901234567890*";  
$needle              = '*****';

$position = strlen($haystack) - strlen($needle) - strpos(strrev($haystack),strrev($needle));
echo $position; // 11

3 ответов


Вероятно, вы используете PHP 4:

от php.net

игла: Если needle не является строкой, он приводится к целому и трактуется как код символа. Игла может быть только одним символом в PHP 4.


WriteCodeOnline.com использует PHP 4.4.9 (проверьте phpversion) и strrpos до 5.0 принимает только один символ, а не строку:

на игла может быть только один символ в PHP 4.

вот почему ваш код обрабатывается как strrpos($string,'*'). В PHP 5.0 и более поздних версиях возвращаемое значение будет 11.


$string = "01234567890*****12345678901234567890*";  
echo strrpos($string,'*****');

PHP версии 5.3.5 результат 11

Если вы хотите получить последнее вхождение попробовать этот

$string = "01234567890*****12345678901234567890*";  
echo strripos($string,'*');//36