Я делаю некоторые тесты с функцией 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»?
Спасибо
От 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)