我尝试使用preg_replace()更改一堆单词。我之所以使用preg_replace而不是strpos,是因为它可以搜索我要替换的同一个字符的多个场合。例如:
$word = "abadi";
$patterns = array("/a/","/b/","/d/","/i/","/I/");
$replacements = array(" A"," B"," D"," I"," IY");
$word = preg_replace($patterns, $replacements, $word);
var_dump ($word); // string ' A B A D IY' (length=12)
我希望所有角色只更改一次。因此,一旦将小写字母i更改为I,请不要再将其更改为IY。有可能吗?
答案 0 :(得分:1)
PHP的内置函数strtr
更适合这种情况。替换子字符串后使用此函数,将不再搜索其新值。
$translations = ['a' => 'A', 'b' => 'B', 'd' => 'D', 'i' => 'I', 'I' => 'IY' ];
$newString = strtr('abadi', $translations);
参见定义:
string strtr ( string $str , array $replace_pairs )
如果给出两个参数,则第二个应该是表单数组中的数组(' from' =>' to',...)。返回值是一个字符串,其中所有出现的数组键都已被相应的值替换。将首先尝试最长的密钥。替换子字符串后,将不再搜索其新值。
strtr
的更多详情,请参阅Documentation。
答案 1 :(得分:0)
你可能需要考虑模式和替换数组的顺序,preg_replace word依次更新字符串,这样可能会有所帮助:
$word = "abadi";
$patterns = array("/I/", "/a/","/b/","/d/","/i/");
$replacements = array(" IY", " A"," B"," D"," I");
$word = preg_replace($patterns, $replacements, $word);
var_dump ($word);