使用str_replace,以便它只作用于第一场比赛?

2022-08-30 05:56:23

我想要一个仅替换.有没有一个简单的解决方案,或者我需要一个黑客解决方案?str_replace()$search$subject


答案 1

没有它的版本,但解决方案一点也不笨拙。

$pos = strpos($haystack, $needle);
if ($pos !== false) {
    $newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
}

非常简单,并且节省了正则表达式的性能损失。


奖励:如果要替换最后一次出现的情况,只需使用代替 .strrposstrpos


答案 2

可以使用preg_replace完成:

function str_replace_first($search, $replace, $subject)
{
    $search = '/'.preg_quote($search, '/').'/';
    return preg_replace($search, $replace, $subject, 1);
}

echo str_replace_first('abc', '123', 'abcdef abcdef abcdef'); 
// outputs '123def abcdef abcdef'

魔术在可选的第四个参数[限制]中。从文档中:

[限制] - 每个主题字符串中每个模式的最大可能替换次数。默认值为 -1(无限制)。


不过,请参阅zombat的答案以获取更有效的方法(大致快3-4倍)。


推荐