格式化文本文件

Aut*_*cus 2 php

我的代码中有这个

echo $result['arr']['sub']."\t\t\t\t".$result['arr2']['sub2'];
Run Code Online (Sandbox Code Playgroud)

我通过标题将其发送到文本文件,但它显示如下:

Subject              Description
Test                 Checking to see it it works
A long string             pushes my description to the side
Run Code Online (Sandbox Code Playgroud)

如何"修复"格式化,以便第二列始终垂直排列,无论第一列中的文本长度如何?

Lig*_*ica 5

我认为你误解了标签空间的作用.他们并没有神奇地考虑以下几行中的文字; 它们只是跳转到显示媒体配置的下一个自由制表位.

如果前面的文本已经超过了制表位,那么是的,它将被跳过.

也许你想在第一列之后有一个固定宽度的边距.

确定要使用的空格数(可能通过获取第一列中最长项的长度,并添加一些填充宽度)​​,然后将其附加到第一列中的每个值,并str_repeat记住减去数量字符实际存在于该字段中.


也许是这样,固定的第一列宽度为20:

<?php
$column_width = 20;
foreach ($data as $result) {
   echo $result['arr']['sub'];
   echo str_repeat(' ', $column_width - strlen($result['arr']['sub']));
   echo $result['arr2']['sub2'];
   echo "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)

(我没有考虑第一列中的文本超过20个字符的情况.)


或许像这样,我上面描述的聪明的扩展:

<?php
$margin = 5;
$column_width = 0;
foreach ($data as $result) {
   $column_width = max($column_width, strlen($result['arr']['sub']));
}
$column_width += $margin;
foreach ($data as $result) {
   echo $result['arr']['sub'];
   echo str_repeat(' ', $column_width - strlen($result['arr']['sub']));
   echo $result['arr2']['sub2'];
   echo "\n";
}
?>
Run Code Online (Sandbox Code Playgroud)

(这里第一列会自动扩展,所以它的长度并不重要.)


这两种方法的现场演示.


进一步的工作可能包括在程序上将第一列中的文本长度限制为适合您的输出上下文的内容,但我会将其留给您.