使用str_replace,以便它只作用于第一场比赛?
我想要一个仅替换.有没有一个简单的解决方案,或者我需要一个黑客解决方案?str_replace()
$search
$subject
我想要一个仅替换.有没有一个简单的解决方案,或者我需要一个黑客解决方案?str_replace()
$search
$subject
没有它的版本,但解决方案一点也不笨拙。
$pos = strpos($haystack, $needle);
if ($pos !== false) {
$newstring = substr_replace($haystack, $replace, $pos, strlen($needle));
}
非常简单,并且节省了正则表达式的性能损失。
奖励:如果要替换最后一次出现的情况,只需使用代替 .strrpos
strpos
可以使用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倍)。