Str заменить для нескольких элементов
Я помню, как делала это раньше, но не могу найти код. Я использую str_replace для замены одного символа следующим образом:str_replace(':', ' ', $string);
но я хочу, чтобы заменить все символы /:*?"<>|
, не делая str_replace для каждого.
8 ответов:
str_replace()
можно взять массив, так что вы могли бы сделать:$new_str = str_replace(str_split('\/:*?"<>|'), ' ', $string);
в качестве альтернативы вы можете использовать
preg_replace()
:$new_str = preg_replace('~[\\/:*?"<>|]~', ' ', $string);
такой:
str_replace(array(':', '\', '/', '*'), ' ', $string);
или, в современном PHP (что-нибудь от 5.4 и далее), Слабый менее многословный:
str_replace([':', '\', '/', '*'], ' ', $string);
, Если вы хотите заменить search1 на replace1 и search2 на replace2, то следующий код будет работать:
print str_replace( array("search1","search2"), array("replace1", "replace2"), "search1 search2" );
/ / выход: replace1 replace2
Если вы заменяете только отдельные символы, вы должны использовать
strtr()
вы могли бы использовать preg_replace (). Следующий пример можно запустить с помощью командной строки php:
<?php $s1 = "the string \/:*?\"<>|"; $s2 = preg_replace("^[\\/:\*\?\"<>\|]^", " ", $s1) ; echo "\n$s2: \"" . $s2 . "\"\n"; ?>
выход:
$s2: "строка"
Я думаю, вы смотрите после этого:
// example private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json'; ... public function templateFor(string $type, string $language): string { return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE); }
У меня была ситуация, когда я должен был заменить HTML-теги с двумя различными результатами замены.
$trades = "<li>Sprinkler and Fire Protection Installer</li> <li>Steamfitter </li> <li>Terrazzo, Tile and Marble Setter</li>"; $s1 = str_replace('<li>', '"', $trades); $s2 = str_replace('</li>', '",', $s1); echo $s2;
результат
"спринклерный и противопожарный Монтажник", "парогенератор","терраццо, плиточный и мраморный сеттер",