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

Другие вопросы по тегам