Понимание функции 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»?

Спасибо

6

Решение

От 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
1

Другие решения

Просто! Потому что он находит последнее вхождение персонаж в строке. Ни слова.

Он просто находит последний символ вхождения и затем 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

Больше информации

2

Из PHP документа:

стог сена
Строка для поиска

игла
Если игла содержит более одного символа, используется только первый. Это поведение отличается от поведения strstr ().

В вашем примере будет использоваться только первый символ вашей иглы (t)

-1
По вопросам рекламы [email protected]