Если *
является вашим единственным символом формата, попробуйте преобразовать *
в %s
(также экранировать существующие %
в %%
), а затем используйте vsprintf()
, что занимает массив значений для передачи в качестве параметров формата:
$str = str_replace(array('%', '*'), array('%%', '%s'), $str);
$newstr = vsprintf($str, $arr);
echo $newstr;
Выход:
abc123efg456hij789
Обратите внимание, что если у вас больше элементов массива, чем звездочек, дополнительные элементы в конце просто не появятся в строке. Если у вас больше звездочек, чем элементов массива, vsprintf()
выдаст предупреждение «слишком мало аргументов» и вернет false
.