与不同的字符串
问题描述:
替换相同字符假设我有一个字符串与不同的字符串
$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)不是*使用正则表达式。
好的解决方案。我只是打算爆炸,然后再合并碎片,这显然不是一个好主意:) – Young 2010-10-21 06:02:56