【问题标题】:Textfile Structure (tables)文本文件结构(表格)
【发布时间】:2011-05-19 02:19:28
【问题描述】:

好吧,我知道我最近在用 php 编写查询并将它们输出到文本文件方面得到了很多帮助。我终于掌握并学会了如何真正做到这一点(谢谢大家!)。下面的代码显示了我所拥有的:

现在我知道表结构 (th/tr/td) 在文本文件中不起作用。我想知道是否有人知道如何将其转换为传统的“列”视图,例如:

id   ||   title   ||   keyword
================================
2    ||   bob     ||   jones
2    ||   bob     ||   jones
2    ||   bob     ||   jones
2    ||   bob     ||   jones

我不一定需要边框或任何东西,至少是一种易于阅读的格式。这个输出的文件将被谷歌产品用于我工作的公司(我相信他们需要一种易于阅读的格式,或者只是以表格形式设置的东西。我可以做一个 CSV,但我对那我做php。再次感谢。

【问题讨论】:

  • CSV 是一种非常简单的格式,特别是因为 PHP 有处理它的函数。它比假表容易得多,特别是如果它应该被自动解析。
  • 顺便说一句,这是一个简化的例子。如果有人要求我从 SQL 查询构建报告,我会在 phpMyadmin 中完成并将结果导出为 Excel 文件。否则你必须不断地修改 SQL、格式等。

标签: php mysql text


【解决方案1】:

CSV 对于fputcsv 来说是微不足道的:

$fh = fopen('output.csv', 'w') or die("can't open file");

// output header and first row
$row = mysql_fetch_assoc($result)
fputcsv($fh, array_keys($row));
fputcsv($fh, $row);

// output the remaining rows
while ($row = mysql_fetch_assoc($result)) {
    fputcsv($fh, $row);
}

fclose($fh);

【讨论】:

  • 确实,使用php内置函数的更好解决方案。我问自己为什么你自己不提供答案。 :) 干得好!
【解决方案2】:

好的,让我们看看如何做到这一点。我将专注于相关的标题打印和显示格式化结果。那么,在这种情况下,我们将使用fprintf 将一些精美的格式化文本打印到我们的相关文件中。所以这里基本上是如何做到这一点的:

id   ||   title   ||   keyword

首先,我们需要为这些字段设置一些宽度,以便所有内容都以漂亮的方式显示。我们将为每个设置宽度为 10:

fprintf($fh, "%-10s || %-10s || %-10s\n", "id", "title", "keyword");

%-10s 的作用是告诉我们,我们想要一个宽度为 10 个字符的字符串,如果长度不够,则使用空格填充。您可以将 10 调整为您想要的任何宽度,以获得最佳效果。结果是这样的:

id         || title      || keyword

接下来我们打印出我们的分隔线,我只是稍微调整了它的长度,直到结果相同:

fprintf($fh, "===================================\n");

然后我们循环并打印出我们的值:

while ($row = mysql_fetch_assoc($result)) {
  fwrite($fh, "%-10s || %-10s || %-10s\n" $row['card_id'], $row['title'],  $row['description']);
}

这会给我们这样的东西:

id         || title      || keyword   
===================================
2          || bob        || jones     
2          || bob        || jones     
2          || bob        || jones     
2          || bob        || jones   

就是这样!以下是完整代码供参考:

<?php
// Make a MySQL Connection
 mysql_connect("mysql4.host.net", "user", "pass") or die(mysql_error()); 
 mysql_select_db("amyadele_test") or die(mysql_error()); 

// Query the database for data
$query = "SELECT card_id,title,description FROM cards";
$result = mysql_query($query);

// Open file for writing
$myFile = "test.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

// Loop through returned data and write (append) directly to file
fprintf($fh, "%-10s || %-10s || %-10s\n", "id", "title", "keyword");
fprintf($fh, "===================================\n");
while ($row = mysql_fetch_assoc($result)) {
  fprintf($fh, "%-10s || %-10s || %-10s\n", $row['card_id'], $row['title'], $row['description']);
}

// Close out the file
fclose($fh);
?>

【讨论】:

  • +1 问题是,你如何处理超过 10 个字符的标题/关键字...?
  • @deceze 确实可能会成为一个问题,这就是为什么我对能够相应地调整宽度发表评论的原因。老实说,ID 字段可能会更短
  • @deceze 可能有一种方法可以通过首先获取最长关键字的长度来动态执行此操作,但我不想让示例过于复杂
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-18
相关资源
最近更新 更多