2012-03-15 3 views
1

В str_replacemanual для PHP говорится следующее:str_replace альтернатива для PHP

Поскольку str_replace() заменяет слева направо, он может заменить ранее вставленное значение при выполнении нескольких замен. См. Также примеры в этом документе.

Есть ли эквивалентная функция, которая не имеет этого, или как я могу это сделать безопасно?

+0

Что вы хотите заменить где? Можете ли вы привести нам пример? – Bram

+4

Безопасно делать * что *? Упоминать ** конкретную задачу **, а не ваши трудности с решением? –

+0

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

ответ

10

Вы ищете strtr (string $str , array $replace_pairs).

Если заданы два аргумента, второй должен быть массивом в массиве формы ('from' => 'to', ...). Возвращаемое значение - это строка, в которой все вхождения ключей массива были заменены соответствующими значениями. Самые дешёвые ключи будет опробован . Как только подстрока будет заменена, ее новое значение не будет искать.

Пример из руководства:

<?php 
$trans = array("h" => "-", "hello" => "hi", "hi" => "hello"); 
echo strtr("hi all, I said hello", $trans); 
?> 

Выведет:

Привет всем, я сказал привет

Какой должна быть именно то, что вам нужно.

0

Использование preg_replace (mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]]) Имейте в виду, что вы можете заставить его заменить все значения или одно, если это то, о чем вы просите.

Или вы могли бы сделать это в части, если Theres заказ, чтобы заменить то, что вы хотите

$value = preg_replace($pattern1, '..', $value); 
$value = preg_replace($pattern2, '..', $value); 
$value = preg_replace($pattern3, '..', $value);