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