标签空间问题

时间:2012-06-03 20:29:58

标签: php

我通过mySQL创建了一个简单的查询系统,它向我显示了100条记录,然后我将它们提取到我的游戏中,但我对PHP中的代码有疑问。

我希望每行之间有5char空间所以我必须使用制表空间(\t\t\t\t\t),但我对这个当前系统有问题(例如,如果我有两个不同字符串值10char和2char的字段然后使用制表空间在它们之间留出空间我会得到不同的结果:

2Char string + 5char space = 7Char10Char string + 5Char space = 15Char

$query = "SELECT * FROM `scores` ORDER by `score` DESC LIMIT 100";
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

$num_results = mysql_num_rows($result);  

for($i = 0; $i < $num_results; $i++)
{
     $row = mysql_fetch_array($result);
     echo $i+1 . "-" . "\t\t Name: " .$row['name'] . "\t\t\t\t Device: " . $row['device'] . "\n \t\t Difficulty: " . $row['level']. "\t\t\t\t Score: " . $row['score'] . "\n\n";
}

代码输出

1- Name: James   Device: HTC OneX
  Difficulty: Hard    Score: 5760

2-  Name:  Erika_S      Device: PC
  Difficulty:  Normal       Score: 13780

...

我想要的输出

1- Name: James          Device: HTC OneX
   Difficulty: Hard     Score: 5760

2- Name: Erika_S        Device: PC
   Difficulty: Normal   Score: 13780
...

2 个答案:

答案 0 :(得分:1)

Tab实际上是一个字符,但以用户想要的方式显示。例如,当您在IDE中为1个选项卡选择8个空格时,您将获得它。有一个名为elastic tabstops的奇妙概念,但它只是概念 - 太可悲了。

结论:你不能用tab所描述的那样做。

你能做什么:

  • 使用&nbsp;计算所需的空格和硬编码,但它很脏,你不应该这样做。
  • 使用html表格

答案 1 :(得分:1)

而不是$ row ['...']使用sprintf(“% - 15s”,$ row ['...']),但在每个地方你都需要调整数字(-15)到了真正需要的地方

<?php
$s = 'monkey';
$t = 'many monkeys';

printf("[%s]\n",      $s); // standard string output
printf("[%10s]\n",    $s); // right-justification with spaces
printf("[%-10s]\n",   $s); // left-justification with spaces
printf("[%010s]\n",   $s); // zero-padding works on strings too
printf("[%'#10s]\n",  $s); // use the custom padding character '#'
printf("[%10.10s]\n", $t); // left-justification but with a cutoff of 10 characters
?>
The above example will output:
[monkey]
[    monkey]
[monkey    ]
[0000monkey]
[####monkey]
[many monke]

http://www.php.net/manual/en/function.sprintf.php

了解详情

如果您不能使用printf,您可以轻松创建自己的功能,做类似的事情,并且足以满足您的需求:

function add_spaces($str, $total_len) {
    return $str . substr("                           ", 0, $total_len - strlen($str));
}