Как сделать так, чтобы все выстраивалось в командной строке с вкладками? - PullRequest
0 голосов
/ 11 ноября 2018

Я часто делаю такие вещи в командной строке:

<?php

    echo 'Short description:' . "\t\t\t\t\t\t" . '123' . "\n";
    echo 'A slightly longer description:' . "\t\t\t\t\t\t" . '321' . "\n";

?>

Они больше не будут совпадать; «123» и «321» не будут находиться в одном «столбце»:

Это то, что я хочу

Это то, что я не хочу

Есть ли какой-нибудь вменяемый способ обойти эту проблему? Раньше я всегда думал, что весь смысл «табулятора» заключался в том, чтобы добиться этого эффекта, но ясно, что это не так? Или я как-то не так понял?

1 Ответ

0 голосов
/ 11 ноября 2018

Вот один из методов.
Может быть, не так просто, как вы ожидали, но это работает.
Я использую полную строку, нахожу самое длинное описание и использую его в качестве основы.

$str = "Short description: \t 123
A slightly longer description: \t 321";

$arr = explode ("\n", $str);
foreach($arr as $line){
    // Create new array with str_len as one item
    $parts = explode("\t", $line);
    $new[] = ['desc' => $parts[0], 'num' => $parts[1], 'len' => strlen($parts[0])];
}
// Find max length in array
$pad = max(array_column($new, 'len'))+1;

// Output it
foreach($new as $sub){
    echo str_pad($sub['desc'], $pad, " ") . "\t" . $sub['num'] . "\n";
}

Выход:

Short description:                   123
A slightly longer description:       321

https://3v4l.org/s1DAD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...