了解strrchr功能

时间:2014-09-28 21:43:59

标签: php string 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"而不是#34;测试代码"?

由于

3 个答案:

答案 0 :(得分:2)

简单!因为它在字符串中找到最后一个字符。不是一个字。

它只找到最后一个出现的字符,然后它将echo该位置的其余字符串。{/ p>


在您的第一个示例中:

$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

More info

答案 1 :(得分:1)

来自 PHP documentation

  

     

如果针包含多个字符,仅使用第一个字符。这种行为是不同的   来自strstr()。


所以第一个例子与:

完全相同
$text = 'This is my code';
echo strrchr($text, 'm');

<强> RESULT

'This is my code'
         ^
        'my code'

您的第二个示例与以下内容完全相同:

$text = 'This is a test to test code';
echo strrchr($text, 't');

<强> RESULT

'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

答案 2 :(得分:-1)

来自PHP doc:

草堆 要搜索的字符串

针 如果针包含多个字符,则仅使用第一个字符。此行为与strstr()的行为不同。

在您的示例中,仅使用针(t)的第一个字符