Добавление пробелов с помощью str_pad - PullRequest
1 голос
/ 14 февраля 2012

Я пытаюсь вывести содержимое массива на экран, но с хорошим отступом:

<code>function fu($var){
    $lengths = array_map('strlen', array_keys($var));
    $longest = max($lengths);

    echo '<pre>';
    foreach($var as $key => $value){
      echo str_pad($key, $longest - strlen($key)).' =&gt; '.$value."\n";
    }
    echo '
';} fu (array ('foo' => 5, 'foooooooooo' => 'xxx', 'abc' => 5454545, '1234567890' => 34, 4352354 => 435, 'a' => 'x',));

По некоторым причинам я не получаю правильные отступы для выходных данных.

Следует добавить (максимальная длина ключа) - (длина ключа) пробелы.Или моя формула не верна?

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

str_pad автоматически дополняет указанную длину, вам не нужно изменять это число в зависимости от длины дополняемой строки.

Поэтому измените:

str_pad($key, $longest - strlen($key))

до

str_pad($key, $longest)
1 голос
/ 14 февраля 2012

Я бы просто использовал форматирование printf для этого.Используйте это вместо вашей линии эха:

printf("%-" . $longest . "s =&gt; $value\n", $key, $value);

Или, если вы хотите выровнять по правому краю:

printf("%" . $longest . "s =&gt; $value\n", $key, $value);
...