与不同的字符串

与不同的字符串

问题描述:

替换相同字符假设我有一个字符串与不同的字符串

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

并根据该阵列

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

现在我想在$str与元件更换* S IN $arr第一个*替换为$arr[0],第二个替换为$arr[1] etc.I检查函数str_replace,虽然它接受数组作为参数,但它我发现它并没有work.And我不能只用

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

因为真正$str可能是相当长的字符串有很多*。任何好的想法?谢谢。

如果*是唯一的格式字符,尝试转换*%s(也逃避现有%%%),然后使用vsprintf(),这需要值的数组中传递作为格式参数:

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

输出:

abc123efg456hij789 

需要注意的是,如果你有比星号更数组元素,最后多余的元素根本不会出现在字符串。如果您的星号比数组元素多,则vsprintf()将发出太少的参数警告并返回false

你可能永远都只是保持简单与preg_replace()并利用$limit说法,就像这样:

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

但是对于实用性的缘故,@ BoltClock的回答是更好的选择,因为它一)不涉及一个循环,但更重要的是b)不是*使用正则表达式。

+0

好的解决方案。我只是打算爆炸,然后再合并碎片,这显然不是一个好主意:) – Young 2010-10-21 06:02:56