Используя str_replace, чтобы он действовал только в первом матче? - PullRequest
288 голосов
/ 10 августа 2009

Я хочу версию str_replace(), которая заменяет только первое вхождение $search в $subject. Есть ли простое решение для этого, или мне нужно хакерское решение?

Ответы [ 22 ]

0 голосов
/ 05 февраля 2013

Вы можете использовать это:

function str_replace_once($str_pattern, $str_replacement, $string){ 

        if (strpos($string, $str_pattern) !== false){ 
            $occurrence = strpos($string, $str_pattern); 
            return substr_replace($string, $str_replacement, strpos($string, $str_pattern), strlen($str_pattern)); 
        } 

        return $string; 
    } 

Нашел этот пример с php.net

Использование:

$string = "Thiz iz an examplz";
var_dump(str_replace_once('z','Z', $string)); 

Выход:

ThiZ iz an examplz

Это может немного снизить производительность, но самое простое решение.

0 голосов
/ 31 октября 2013

это мой первый ответ здесь, я надеюсь сделать это правильно. Почему бы не использовать четвертый аргумент функции str_replace для этой проблемы?

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

count: если оно пройдено, будет установлено количество выполненных замен.


edit: этот ответ неправильный, потому что 4-й параметр str_replace является переменной, которой присваивается количество выполненных замен. Это несовместимо с preg_replace , который имеет 4-й параметр $limit и 5-й параметр &$count.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...