php sprintf с массивом

у меня есть заполнители строки соответствия ведьмы массива следующим образом:

"some text %s another text %s extra text %s"

и массива:

$array[0] match the first %s 
$array[1] match the second %s 
$array[2] match the third %s 

Я думал, что это можно сделать с помощью функции sprintf следующим образом:

$content = sprintf("some text %s another text %s extra text %s", $array);

но это возвращает слишком мало аргументов ошибки, я попытался использовать implode:

$content = sprintf("some text %s another text %s extra text %s", implode(",",$array));

спасибо заранее

4 ответов


использовать vsprintf вместо sprintf. Он принимает параметр array, из которого он форматирует строку.

$content = vsprintf("some text %s another text %s extra text %s", $array);

альтернатива vsprintf в PHP 5.6+

sprintf("some text %s another text %s extra text %s", ...$array);

здесь вы должны использовать vsprintf() вместо sprintf().

sprintf() принимает в качестве аргумента только простые переменные. Но вы пытаетесь передать массив в качестве аргумента.

для этого нужно vsprintf(), который принимает массив в качестве аргумента.

например в вашем случае:

"some text %s another text %s extra text %s"

и массива:

$array[0] match the first %s 
$array[1] match the second %s 
$array[2] match the third %s 

чтобы достичь того, чего вы хотите, вы должны сделать следующее:

$output = vsprintf("some text %s another text %s extra text %s",$array);
echo $output;

выход:

some text match the first another text match the second extra text match the third

$rv = array(1,2,3,4);
sprintf('[deepak] yay [%s]', print_r($rv, true))