开发者

replace the same characters with different strings [duplicate]

This question already has answers here: Multiple replace (probably preg_replace) of same string with array (2 answers) Closed 7 months ago.

Assuming I have a string

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

and an array

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

Now I want to replace the *s in $str with the elements in $arr according to the positions.The first * replaced with $arr[0],the second replaced with $arr[1] etc.I check the function str_replace,though it accepts arrays as parameters but I found it did not work.And I cannot just use

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

becaus开发者_高级运维e the real $str may be quite a long string with lots of *.Any good ideas?Thanks.


If * is your only format character, try converting * to %s (also escape existing % to %%), and then using vsprintf(), which takes an array of values to pass in as format parameters:

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

Output:

abc123efg456hij789

Note that if you have more array elements than asterisks, the extra elements at the end simply won't appear in the string. If you have more asterisks than array elements, vsprintf() will emit a too-few-arguments warning and return false.


You could always just keep it simple with preg_replace() and make use of the $limit argument, like so:

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

but for practicality's sake, @BoltClock's answer is the better choice as it a) does not involve a loop, but more importantly b) is not forced to use a regular expression.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜