用不同的字符串替换几次相同的字符
问题描述:
我有一个字符串中有相同的字符多次,我想用数组中的不同字符串替换此字符的每个出现。即就像在准备好的发言:用不同的字符串替换几次相同的字符
字符串:"SELECT * FROM x WHERE a = ? AND b = ?"
阵:['alpha', 'beta']
结果:"SELECT * FROM x WHERE a = alpha AND b = beta"
答
试试这个:
$str = "SELECT * FROM x WHERE a = ? AND b = ?";
$arr = array("alpha", "beta");
foreach ($arr as $s)
$str = preg_replace("/\?/", $s, $str, 1);
echo $str;
见here。第四个参数将每次运行的最大替代次数限制为一次而不是无限次。
答
无正则表达式函数(作为奖励,也允许替换任意字符串,而不是只是字符):
function replacement($string, $search, array $replacements) {
$pos = 0;
while (($f = strpos($string, $search, $pos)) !== FALSE) {
$r = array_shift($replacements);
$string = substr($string, 0, $f) . $r .
substr($string, $f + strlen($search));
$pos = $f + strlen($r);
}
return $string;
}
例子:
echo replacement("sf sdf aaasdf sdsaaaaggg", "aa",
array("alpha", "beta", "gammma"));
给出:
sf sdf alphaasdf sdsbetagammmaggg
您正在使用什么数据库接口?它可能具有内置的能力(它可能更安全)。 – strager 2010-08-03 03:03:58
是的,当然数据库接口有这个通常内置的,但我只是想要类似SQL的语法作为例子,因为大多数人已经知道它。在这里已经有一些很好的解决方案,我只是想弄清楚哪一个最适合我。 – Matt 2010-08-03 13:53:28