我有一个字符串,例如
$str = "name is: ?, role is: ?";
我有一个数组,例如
$array = array('John','Carpenter');
我想将字符串中的每个?替换为数组中的相应项,即第一个?被 John 替换为第二个?被 Carpenter 替换。
数组中的值数始终与字符串中?的数量相同。
我已经提出以下代码来执行此操作:
for($i=0;$i<count($array);$i++) {
$str = preg_replace('/\?/',$array[$i],$str,1);
}
我的问题是,这是我做我想做的最有效的方式吗?如果你知道一种方法,或者更有效的方法,请你发一个答案吗?
非常感谢。
答案 0 :(得分:2)
您应该使用vsprintf来执行此操作:
$format = "name is: %s, role is: %s";
$array = array('John','Carpenter');
$str = vsprintf($format, $array);
echo $str;
// name is: John, role is: Carpenter
答案 1 :(得分:0)
使用preg_replace_callback(),每次匹配调用用户提供的函数,每次都可以返回不同的替换:
$i = 0;
$str = preg_replace_callback('/\?/', function ($m) use ($arr, &$i) {
return $arr[$i++];
}, $str);