Как отформатировать массив с помощью printf в php


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

//my variable 
$car = "BMW X6";

printf("I drive a %s",$car); // prints I drive a BMW X6, 

Однако, когда я пытаюсь распечатать массив с помощью printf, похоже, нет способа его отформатировать. Кто-нибудь может помочь?

Author: mensch, 2012-01-19

5 answers

Вот выдержка из одного из комментариев к http://php.net/manual/en/function.printf.php:

[Примечание редактора: Или просто используйте vprintf...]

Если вы хотите сделать что-то вроде:

// this doesn't work
printf('There is a difference between %s and %s', array('good', 'evil'));   

Вместо

printf('There is a difference between %s and %s', 'good', 'evil'); 

Вы можете использовать эту функцию:

function printf_array($format, $arr) 
{ 
    return call_user_func_array('printf', array_merge((array)$format, $arr)); 
}  

Используйте его следующим образом:

$goodevil = array('good', 'evil'); 
printf_array('There is a difference between %s and %s', $goodevil); 

И он напечатает:

There is a difference between good and evil
 5
Author: Pateman, 2012-01-19 16:03:33

Вы не можете "распечатать" массив просто так, вам придется перебирать его с помощью foreach, затем вы можете распечатать все, что хотите, со значениями. Например:

$cars = array('BMW X6', 'Audi A4', 'Dodge Ram Van');
foreach($cars as $car) {
    printf("I drive a %s", $car);
}

Это приведет к следующему результату:

I drive a BMW X6

I drive a Audi A4

I drive a Dodge Ram Van

 3
Author: Oldskool, 2012-01-19 15:26:46

Вы ищете что-то подобное, используя print_r с параметром true:

printf("My array is:***\n%s***\n", print_r($arr, true));
 1
Author: anubhava, 2012-01-19 15:33:23

Да

Разместите в своем html-файле следующее:

<pre>
  <?php 
   print_r ($your_array);
  ?>
</pre>

Или в вашем коде только место:

 print_r ($your_array);
 0
Author: workdreamer, 2012-01-19 15:24:57

Printf не обрабатывает массив рекурсивно. Однако вы можете сделать:

$cars=array('Saab','Volvo','Koenigsegg');
print_r($cars);
 0
Author: Gustav, 2012-01-19 15:25:42