【问题标题】:PHP Export Array/Table as CSV from another pagePHP 从另一个页面将数组/表导出为 CSV
【发布时间】:2014-08-28 12:49:24
【问题描述】:

Foreward:这里是 PHP 初学者。

我在从用户定义的设置动态创建的页面上创建了一个大表。它大约有 1600 行和 15 列。我还用这些数据填充了一个数组,其中 Key 0 = 第 1 行的所有值,用逗号分隔。键 1 = 第 2 行的所有值,以逗号分隔。

数组是在创建表时从循环中填充的,并且具有名称/结构:

$CSVOut[$CSVKey]

我已确认数组已填充并在第一页上正确显示。

我有一个使用以下代码调用“textexport.php”的按钮:

<?php

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

outputCSV(array(
    array("name 1", "age 1", "city 1"),
    array("name 2", "age 2", "city 2"),
    array("name 3", "age 3", "city 3")
));

function outputCSV($data) {
    $output = fopen("php://output", "w");
    foreach ($data as $row) {
        fputcsv($output, $row); // here you can change delimiter/enclosure
    }
    fclose($output);
}


?>

TestExport.php 中的示例数组准确地导出了硬编码数组的 CSV。我已经搜索并尝试了多种方法,了解如何将数组 $CSVOut 从我的第一页获取到此页面并使用该函数填充我的 CSV,但它对我来说并没有组合在一起。

我尝试过 POST 方法(我已经能够在此页面上成功发布其他用户变量,所以我有点理解它的工作原理)并尝试了 SESSIONS(但还没有完全掌握这个概念)

我有几个问题:

1) 尝试将动态创建的 html 表导出为 CSV 的方法有多糟糕?

2) 最好(最简单?)的方法是什么?

3) 有人对如何执行此操作有一些指导/示例吗?

4) 是否可以反向执行 - 只需在填充数组的第一页上调用此函数?

对于这个项目中的所有其他内容,我已经能够找到现有的示例来适应我的项目,但我无法真正做到这一点。任何帮助将不胜感激。

【问题讨论】:

  • 您有可用的后端存储吗?理想的方法是将用户创建的内容保存到数据存储中(如 MySQL 或 Mongo 或类似的东西)——此时您可以在闲暇时检索、处理和提供这些内容。
  • 我想我可以 - 现在我刚刚在我的本地主机上进行测试。我不需要将这些实际存储任何时间,这就是我开始使用数组路由的原因。如果这个站点同时有多个人会发生什么 - 如果我正在写入同一个数据库,我如何确保我正确地为每个用户提供他们的 CSV? (我对 MySQL 一无所知,所以如果这个问题很明显,请原谅这个问题。
  • 您很可能需要设置会话才能将用户及其数据正确地保存在一起。听起来您不需要太多处理 - 您是否考虑过仅使用 JavaScript 将其内容格式化为 CSV 并提供给他们进行复制和粘贴?还是必须以文件的形式下载?
  • 它不必下载,表格可以复制/粘贴到任何电子表格类型的程序中,最终用户可以根据需要进一步操作数据。我可能只是保持这种方式,但我认为拥有按一个按钮的功能会很好,它会为他们打开一个 xls csv 文件

标签: php arrays csv


【解决方案1】:

如果您不想(或没有时间)为后端数据存储和用户会话而烦恼,最好的解决方案可能就是使用 JavaScript/jQuery 对用户拥有的动态输出进行切片和切块创建成用户可以复制和粘贴的 CSV 格式的字符串。只需抓住他们制作的表格并处理每一行就足够了……使用 jQuery 会更容易。

var rows = $('#example tbody').find('tr');
var output_string = '';

rows.each(function() {
    var column_data = jQuery.map( $(this).find('td'), function(datum) {
        return $(datum).text().replace(/\s/gi,'');        
    });
    output_string += column_data.join(',')+'\n';
});

$('#output').val(output_string);

上面的代码将抓取 HTML 表格的主体部分(忽略您定义的任何表格标题)并将每个表格行转换为以换行符结尾的逗号分隔值行。

然后它将创建的输出转储到文本区域中。

JSFiddle Example

这并不像临时将内容保存到 Mongo/MySQL 并通过单击按钮将其返回给用户那样花哨 - 但它可以快速完成,而无需整理数据存储、会话、身份验证、等等。然而,这些都是完整 Web 堆栈中相当常见的部分,所以我建议您在某个时候花一些时间来熟悉它们。这里有一些有用的链接。

WampXAMPP 是全方位服务的 PHP、MySQL 和 Apache 堆栈,非常适合在开发过程中启动和运行,而不会浪费大量时间摆弄服务器配置。

here 是 PHP 会话的基本解释/教程。还要考虑一点点阅读,开始 PHP 开发人员可能会陷入许多安全陷阱,this book 涵盖了最可以避免的那些。

【讨论】:

  • 您应该也可以使用 jQuery ON 函数 (api.jquery.com/on) 在按钮单击时触发上述示例
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多