我的代码中有这个
echo $result['arr']['sub']."\t\t\t\t".$result['arr2']['sub2'];
我通过标题将其发送到文本文件,但它显示如下:
Subject Description
Test Checking to see it it works
A long string pushes my description to the side
如何“修复”格式化,以便第二列始终垂直排列,无论第一列中的文本长度如何?
答案 0 :(得分:5)
我认为您误解了标签空间的作用。他们不会神奇地考虑以下几行中的文字;他们只是跳转到显示媒体配置的下一个免费标签停止。
如果前面的文字已经过了制表位,那么,是的,它会被跳过。
也许你想要在第一列之后有一个固定宽度的边距。
确定要使用的空格数(可能通过获取第一列中最长项的长度,并添加一些填充宽度),然后使用{{1}将其附加到第一列中的每个值记住要减去该字段中实际的字符数。
也许是这样,固定的第一列宽度为20:
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";
}
?>
(这里第一列会自动扩展,所以它的长度并不重要。)
进一步的工作可能包括在程序上将第一列中的文本长度限制为适合您输出上下文的内容,但我会将其留给您。
答案 1 :(得分:1)
this答案的改进: 找到最佳的列宽。
$column_width = 2 + max(array_map(create_function('$x', 'return strlen($x["arr"]["sub"]);'), $data));
foreach ($data as $result) {
echo $result['arr']['sub'];
echo str_repeat(' ', $column_width - strlen($result['arr']['sub']));
echo $result['arr2']['sub2'];
echo "\n";
}
答案 2 :(得分:1)
使用str_pad()
的简单解决方案:
$data = array(
'Subject' => 'Description',
'Test' => 'Checking to see whether it works',
'A really really really long string' => 'pushes my description to the side',
);
// Find the longest string for column 1
foreach ($data as $key => $val) {
$width[] = strlen($key);
}
$column_width = max($width) + 5; // +5 for margin
foreach ($data as $key => $val) {
echo str_pad($key, $column_width).$val."\n";
}
演示:http://codepad.org/KoFxBis8
这将找到最宽的列并相应地进行调整。只需将+5设置为列之间所需的空格即可。