用str_replace模仿sprintf行为?

时间:2012-03-13 16:07:39

标签: php

基本上我有这样的情况:

$search = array(
   '?',
   '?'
);

$replace = array(
   '1',
   '2'
);

当我尝试:

str_replace($search,$replace,"First value: ? Second Value: ?");

我明白了:

"First value: 1 Second Value: 1"  //> Notice the "1" repetead

而不是

 "First value: 1 Second Value: 2"

我怎样才能得到第二个结果(即使没有使用str_replace)?

3 个答案:

答案 0 :(得分:3)

preg_replace有一个限制参数,因此您可以使用它:

$search = array(
   '/\?/',
   '/\?/'
);

$replace = array(
   '1',
   '2'
);

echo preg_replace($search, $replace, "First value: ? Second Value: ?", 1);

// output: First value: 1 Second Value: 2

您可以使用array_fill构建搜索数组:

preg_replace(array_fill(0, count($replace), '/\?/'), $replace, $subject, 1);

答案 1 :(得分:1)

请勿使用str_replace。使用它是错误的功能。

或者,改变你的?通过其他不同的东西。例如:

$search = array(
   '\1',
   '\2'
);
$replace = array(
   'firstValue',
   'secondValue'
);
str_replace($search,$replace,"First value: \\1 Second Value: \\2");

答案 2 :(得分:0)

如果已知或限制替换量,您只需使用字符串格式化功能即可。我喜欢使用vsprintf,因为它很容易将替换值附加到堆栈中。

在这种情况下,要使用vsprintf获得所需的结果:

$subject = 'First value: %s Second Value: %s';
$values = array('1', '2');
echo vsprintf($subject, $values);