PHP从另一个页面将数组/表导出为CSV

PHP从另一个页面将数组/表导出为CSV,php,arrays,csv,Php,Arrays,Csv,前言:这里是PHP初学者 我在一个页面上创建了一个大表,该页面是根据用户定义的设置动态创建的。它大约有1600行和15列。我还用这个数据填充了一个数组,其中键0=第1行中所有值,用逗号分隔。键1=第2行的所有值,用逗号分隔 该数组是在创建表时从循环填充的,其名称/结构为: $CSVOut[$CSVKey] 我已确认阵列已填充并在第一页正确显示 我有一个调用“textexport.php”的按钮,其代码如下: <?php header("Content-type: text/csv");

前言:这里是PHP初学者

我在一个页面上创建了一个大表,该页面是根据用户定义的设置动态创建的。它大约有1600行和15列。我还用这个数据填充了一个数组,其中键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方法(我已经成功地在这个页面上发布了其他用户变量,所以我有点了解它是如何工作的)并尝试过会话(但还没有完全掌握这个概念)

我有几个问题:

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

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

3) 有人对如何做到这一点有一些指导/示例吗

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

对于这个项目中的所有其他方面,我已经能够找到现有的例子来适应我的项目,但我还没有真正做到这一点。任何帮助都将不胜感激。

如果您不想(或没有时间)为后端数据存储和用户会话操心,最好的解决方案可能只是使用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表的主体部分(忽略已定义的任何表标题),并将每个表行转换为以换行符结尾的逗号分隔值行

然后将创建的输出转储到textarea中

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

或者是全服务PHP、MySQL和Apache堆栈,它们非常适合启动和运行开发,而无需浪费大量时间来摆弄服务器配置


这是PHP会话的基本解释/教程。同时考虑一下轻阅读,有很多安全隐患,让PHP开发人员可以进入和覆盖最容易避免的错误。

你有后端存储吗?理想的方法是将用户创建的内容保存到数据存储中(如MySQL或Mongo或类似的东西),在这一点上,您可以随时检索、处理和提供服务。我想我可以,现在我刚刚在本地主机上进行了测试。我不需要实际存储任何时间,这就是我开始使用阵列路由的原因。如果此站点同时有多个用户,会发生什么情况?如果我正在向同一数据库写入内容,如何确保正确地为每个用户提供CSV?(我不了解MySQL,所以如果问题很明显,请原谅。您很可能需要设置会话,以便将用户和他们的数据正确地放在一起。听起来您似乎不太需要处理-您是否考虑过只使用JavaScript将他们的内容格式化为CSV并将其提供给c复制并粘贴?或者它必须作为文件下载吗?它不必下载,表格可以复制/粘贴到任何电子表格类型的程序中,最终用户可以根据需要进一步操作数据。我可能只是保持这种方式,但我想这是一个很好的功能,可以按下一个按钮,打开一个xls cs您应该能够使用函数()上的jQuery在单击按钮时触发上述示例