Понимание функции strrchr
Я делаю некоторые тесты с функцией strrchr, но я не могу понять вывод:
$text = 'This is my code';
echo strrchr($text, 'my');
//my code
Хорошо, функция вернула строку до последнего появления
$text = 'This is a test to test code';
echo strrchr($text, 'test');
//t code
Но в этом случае, почему функция возвращает "t code", а не "test code"?
Спасибо
3 ответа
Из документации PHP:
игла
Если стрелка содержит более одного символа, используется только первый. Это поведение отличается от поведения strstr().
Итак, ваш первый пример точно такой же, как:
$text = 'This is my code';
echo strrchr($text, 'm');
РЕЗУЛЬТАТ
'This is my code'
^
'my code'
Ваш второй пример точно такой же, как:
$text = 'This is a test to test code';
echo strrchr($text, 't');
РЕЗУЛЬТАТ
'This is a test to test code'
^
't code'
Эта функция, которую я сделал, делает то, что вы ожидали:
/**
* Give the last occurrence of a string and everything that follows it
* in another string
* @param String $needle String to find
* @param String $haystack Subject
* @return String String|empty string
*/
function strrchrExtend($needle, $haystack)
{
if (preg_match('/(('.$needle.')(?:.(?!\2))*)$/', $haystack, $matches))
return $matches[0];
return '';
}
Используемое здесь регулярное выражение можно проверить здесь: DEMO
пример:
echo strrchrExtend('test', 'This is a test to test code');
ВЫХОД:
test code
Просто! Потому что он находит последнее вхождение символа в строку. Ни слова.
Он просто находит последний символ вхождения и затем echo
остальная часть строки из этой позиции.
В вашем первом примере:
$text = 'This is my code';
echo strrchr($text, 'my');
Находит последний m
а затем распечатывает сброс включен m
сам: my code
В вашем втором примере:
$text = 'This is a test to test code';
echo strrchr($text, 'test');
Находит последний t
и, как в последнем примере, печатает остальное: test code
Из PHP документа:
стог сена Строка для поиска в
игла Если игла содержит более одного символа, используется только первый. Это поведение отличается от поведения strstr().
В вашем примере будет использоваться только первый символ вашей иглы (t)