Вот один из методов.
Может быть, не так просто, как вы ожидали, но это работает.
Я использую полную строку, нахожу самое длинное описание и использую его в качестве основы.
$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