2012-02-14 4 views
1

Я пытаюсь напечатать содержимое массива на экран, но красиво отступ:добавляющим пространство с str_pad

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 '</pre>'; 
} 

fu(array(
    'foo'   => 5, 
    'foooooooooo' => 'xxx', 
    'abc'   => 5454545, 
    '1234567890' => 34, 
    4352354  => 435, 
    'a'   => 'x', 
)); 

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

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

+1

вы пробовали print_r? или это не для отладки? –

ответ

1

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

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

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

в

str_pad($key, $longest) 
1

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

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

Или, если вы хотите правильно выравнивать:

printf("%" . $longest . "s =&gt; $value\n", $key, $value); 
Смежные вопросы