基本上我有这样的情况:
$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)?
答案 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);