使用数组多次替换(可能是preg_replace)相同的字符串

时间:2010-01-29 11:44:26

标签: php preg-replace

我需要用数组中的字符串替换某个字符串(问号)的多个实例。例如如果我想要替换的字符串出现3次而我的数组长度为3,则第一个将被数组中的第一个项目替换,第二个将替换为第二个等等。

你可能认识到它与mysqli中预备语句的工作方式非常相似。

以下是一个例子:

$myArray = array(
    [0] => 'yellow',
    [1] => 'green',
    [2] => 'red'
);

$myString = 'banana is ?, apple is ?, tomato is ?';

$newString = someFunction($myString,$myArray);

echo $newString;

然后返回

banana is yellow, apple is green, tomato is red

任何人都可以使用PHP 5.2建议一种方法。

2 个答案:

答案 0 :(得分:5)

为什么不使用

$retString = vsprintf('banana is %s, apple is %s, tomato is %s', $myArray);  
return $retString;

答案 1 :(得分:2)

在PHP 5.2中有点难看,因为你必须使用全局变量在回调之间传递信息,否则它会非常灵活。使用preg_replace_callback()

preg_replace_callback('!\?!', 'rep_array', $myString);

$i = 0;

function rep_array($matches) {
  global $myArray;
  return $myArray[$i++];
}

你必须满足比数组条目更多的? s,以及每次调用时重置计数器。

Adam对于sprintf()更加清晰,但你并不总是控制输入字符串。 preg_replace_callback可以满足更广泛的环境。