передать в printf массив

Shiz

Новичок
передать в printf массив

хочу передать в printf массив

например так:

PHP:
$format="%1\$s %2\$s %3\$s";
$arr=array("one","two", "three");

printf($format, $arr[0], $arr[1], $arr[2]);
но мне не известно сколько будет элементов в массиве, а значит такой код не подойдет

как можно вызвать printf с переменным количеством переменных?
 

Shiz

Новичок
PHP:
function replace_arr($format, $arr){
    foreach($arr as $k=>$v){ 
        $format=str_replace("%$k",$v,$format);
    }
    return $format;
}


$arr=array(1=>"one","two", "three");



print(replace_arr("%1 %2 %3", $arr));
так?

-~{}~ 16.07.06 01:56:

0xHH
спасибо, огромное
 

kruglov

Новичок
Shiz
как, как, циклом по массиву и отдельный printf на каждый элемент.

p.s. вот что такое, вместо того, чтобы за 3 мин. написать может чуть неоптимальный вариант "в лоб", будут на форуме изящного решения ждать. Хорошо еще нашелся тот, кто ответил в тот же день...
 

0xHH

Новичок
kruglov
vprintf не лучший вариант. Format пишется для всех элементов, а не используется один для всех. Поэтому ничем не лучше простого цикла printf на каждый элемент в отдельности.

В итоге получаем

PHP:
<?PHP

$arr=array("one","two", "three");
$format="";
for ($i=1;$i<sizeof($arr)+1; $i++)
{
	$format.="%$i\$s";
}
vprintf($format, $arr);

?>
Что в лоб, что по лбу. :)
 

ksnk

прохожий
0xHH
Хм... Я чего не понимаю. А так не изяшшнее?
PHP:
$arr=array("one","two", "three"); 
vprintf(str_repeat("%s ",count($arr)),$arr);
 
Сверху