我想用字符串中的多个不同字符串替换不同的子字符串,是否有更好的方法而不是我的劳动和使用
str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
要替换的字符串数量是多少次?
例如:在任何示例字符串中分别用a, b and c
替换d, e and f
。
当然,我有大量的词要改变,我需要它。
答案 0 :(得分:6)
str_replace()接受一个搜索和替换参数的数组,因此您可以在数组中传递几个字符串进行搜索,并将替换为replace参数中传递的数组中的相应字符串,如下所示:
$search = array('a','b','c');
$replace = array('d','e','f');
$res = str_replace($search, $replace, 'a b cool');
echo $res; //echoes 'd e fool'
答案 1 :(得分:0)
通常的做法是提供一系列翻译
$xlat = array(
'a' => 'd',
'b' => 'e',
'c' => 'f',
);
然后将其传递给str_replace
:
$result = str_replace(array_keys($xlat), array_values($xlat), $source);
您可以从SQL查询或其他来源构建数组。
如果源和替换字符串集之间存在交集,或源字符串之间存在内部匹配,则必须小心,例如
'Alpha' => 'Beta',
'Beta' => 'Gamma',
甚至更偷偷摸摸,
'Alpha' => 'Beta',
'Alphabet' => 'ABCDEFGHIJ',
因为内部str_replace
使用循环,因此“Base Alpha”将显示为“Base Gamma”,而“Alphabet”将显示为“Betabet”而不是“ABCDEFGHIJ”。处理此问题的一种可能方法是逐步构建$xlat
;如果你发现新夫妻'a'=> 'b','a'已经在$xlat
的值中,您可以将推送到$xlat
而不是追加。当然,更复杂的关键字集(甚至两个或更多术语的交换)可能无法解决。
另一种方法是在两次运行中执行此操作:首先生成表单的$xlat1
数组
'a' => '###<UNIQUEID1>###',
'b' => '###<UNIQUEID2>###',
和表格的第二个数组
'###<UNIQUEID1>###' => 'c',
'###<UNIQUEID2>###' => 'd',
您可以使用循环将第一个单数组表单“升级”为第二个:
// First step, we sort $xlat in order of decreasing key size.
// This ensures that *Alphabet* will be replaced before *Alpha* is ever checked.
// Then we build
foreach($xlat as $from => $to)
{
$id = uniqid();
$xlat1[$from] = $id;
$xlat2[$id] = $to;
}
$temp = str_replace(array_keys($xlat1), array_values($xlat1), $source);
$result = str_replace(array_keys($xlat2), array_values($xlat2), $temp);