Php 用不同的字符串替换相同的字符
假设我有一根绳子Php 用不同的字符串替换相同的字符,php,arrays,replace,Php,Arrays,Replace,假设我有一根绳子 $str = "abc*efg*hij*"; 和一个数组 $arr = array("123","456","789"); 现在我想根据位置将$str中的*替换为$arr中的元素。第一个*替换为$arr[0],第二个替换为$arr[1]等。我检查了函数,虽然它接受数组作为参数,但我发现它不起作用 $newstr = "abc{$arr[0]}efg{$arr[1]}hij{$arr[2]}" 因为真正的$str可能是一个包含大量*的很长的字符串。有什么好主意吗?谢谢。如果
$str = "abc*efg*hij*";
和一个数组
$arr = array("123","456","789");
现在我想根据位置将$str
中的*
替换为$arr
中的元素。第一个*
替换为$arr[0]
,第二个替换为$arr[1]
等。我检查了函数,虽然它接受数组作为参数,但我发现它不起作用
$newstr = "abc{$arr[0]}efg{$arr[1]}hij{$arr[2]}"
因为真正的
$str
可能是一个包含大量*
的很长的字符串。有什么好主意吗?谢谢。如果*
是您唯一的格式字符,请尝试将*
转换为%s
(同时将现有的%
转义为%
),然后使用,它将值数组作为格式参数传入:
$str = str_replace(array('%', '*'), array('%%', '%s'), $str);
$newstr = vsprintf($str, $arr);
echo $newstr;
输出:
abc123efg456hij789
请注意,如果数组元素多于星号,则末尾的额外元素将不会出现在字符串中。如果星号多于数组元素,
vsprintf()
将发出太少的参数警告并返回false您可以始终使用preg\u replace()
保持简单,并使用$limit
参数,如下所示:
for($i = 0; $i < count($arr); $i++)
$str = preg_replace('/\*/', $arr[$i], $str, 1);
($i=0;$i
$str=preg\u replace('/\*/',$arr[$i],$str,1);
但出于实用性考虑,@BoltClock的答案是更好的选择,因为它a)不涉及循环,但更重要的是b)不必使用正则表达式。很好的解决方案。我只是计划将其分解,然后合并各个部分,这显然不是一个好主意:)