php – replace the same characters with different strings – Education Career Blog

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 $arr0,the second replaced with $arr1 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{$arr0}efg{$arr1}hij{$arr2}"

because 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;



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.

Leave a Comment