用不同的字符串替换相同的字符

时间:2010-10-21 05:45:59

标签: php arrays replace

假设我有一个字符串

$str = "abc*efg*hij*";

和一个数组

$arr = array("123","456","789");

现在我想根据位置将*中的$str替换为$arr中的元素。第一个*替换为$arr[0],第二个替换为$arr[1]等。我检查函数str_replace,虽然它接受数组作为参数,但我发现它不起作用。我不能只使用

$newstr = "abc{$arr[0]}efg{$arr[1]}hij{$arr[2]}"

因为真正的$str可能是一个很长的字符串,有很多*。有什么好主意吗?谢谢。

2 个答案:

答案 0 :(得分:12)

如果*是您唯一的格式字符,请尝试将*转换为%s(也将现有的%转换为%%),然后使用{{ 3}},它接受​​一组值作为格式参数传入:

$str = str_replace(array('%', '*'), array('%%', '%s'), $str);
$newstr = vsprintf($str, $arr);
echo $newstr;

输出:

abc123efg456hij789

请注意,如果您有比星号更多的数组元素,则末尾的额外元素将不会出现在字符串中。如果您有更多的星号而不是数组元素,vsprintf()将发出太少的参数警告并返回false

答案 1 :(得分:1)

您可以随时使用preg_replace()保持简单并使用$limit参数,如下所示:

for($i = 0; $i < count($arr); $i++)
    $str = preg_replace('/\*/', $arr[$i], $str, 1);

但为了实用,@ BoltClock的答案是更好的选择,因为a)不涉及循环,但更重要的是b)不被强制使用正则表达式。