web-dev-qa-db-fra.com

Str_replace pour plusieurs éléments

Je me souviens de l'avoir déjà fait, mais je ne trouve pas le code. J'utilise str_replace pour remplacer un caractère comme celui-ci: str_replace(':', ' ', $string); mais je souhaite remplacer tous les caractères suivants \/:*?"<>|, sans effectuer str_replace pour chacun d'eux.

99
sameold

str_replace() peut prendre un tableau, vous pouvez donc faire:

$new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);

Sinon, vous pouvez utiliser preg_replace() :

$new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);
101
NullUserException

Comme ça:

str_replace(array(':', '\\', '/', '*'), ' ', $string);

Ou, dans les PHP modernes (quelque chose à partir de la 5.4), les mots légèrement moins verbeux:

str_replace([':', '\\', '/', '*'], ' ', $string);
161
Dogbert

Par exemple, si vous souhaitez remplacer search1 par replace1 et search2 par replace2, le code suivant fonctionnera:

print str_replace(
    array("search1","search2"),
    array("replace1", "replace2"),
    "search1 search2"
);

// Sortie: replace1 replace2

61
Sumoanand
str_replace(
    array("search","items"),
    array("replace", "items"),
    $string
);
43
Marty

Si vous ne remplacez que des caractères simples, vous devez utiliser strtr()

6
Explosion Pills

Vous pouvez utiliser preg_replace () . L'exemple suivant peut être exécuté à l'aide de la ligne de commande php:

<?php
$s1 = "the string \\/:*?\"<>|";
$s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
echo "\n\$s2: \"" . $s2 . "\"\n";
?>

Sortie:

$ s2: "la chaîne"

1
GreenMatt

Je suppose que tu t'occupes de ça:

// 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);
}
0
Erald Karakashi