Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP POST表单中传递一个巨大的数组,以便基于该数组创建CSV文件_Php_Forms - Fatal编程技术网

在PHP POST表单中传递一个巨大的数组,以便基于该数组创建CSV文件

在PHP POST表单中传递一个巨大的数组,以便基于该数组创建CSV文件,php,forms,Php,Forms,我有一个相当大的PHP数组:假设2000行和50列都包含字符串 我想创建一个脚本,将此数组转换为CSV文件。对于较小的数组,我通过序列化数组并将其以隐藏的形式发送到表单中来实现这一点 <input name='csvarray' type='text' hidden value='<?php echo (serialize($csvArray)); ?>'> 假设您的数组是2d数组 $array = array(/* Whatever your array is */)

我有一个相当大的PHP数组:假设2000行和50列都包含字符串

我想创建一个脚本,将此数组转换为CSV文件。对于较小的数组,我通过序列化数组并将其以隐藏的形式发送到表单中来实现这一点

<input name='csvarray' type='text' hidden value='<?php echo (serialize($csvArray)); ?>'>

假设您的数组是2d数组

$array = array(/* Whatever your array is */);
$csv = "";
foreach($array as $row) {
    foreach($row as $col) {
        $csv .= $col . ",";
    }
    $csv .= "\n";
}
这将创建一个csv,您可以随意使用。无需发送到客户端并返回

编辑:如果数组中有逗号,可以使用
pre\u replace()


Edit2:有人告诉我,有一个函数名为,它使我的整个代码变得无用。但是,从这个角度看,它需要一个文件句柄,因此如果只需要一个带有csv的var,我的代码可能会更简单。

我认为您看得不对。服务器上已经有了此阵列,那么为什么只需要将其发送回客户端就可以将其发送回服务器呢?相反,我建议您将其存储在会话中,并使用隐藏的输入来指示数组实际上在会话中,类似于这样:

<?php
session_start();
$_SESSION['csvarray'] = $csvArray;
?>

<input name='csvarray' type='text' hidden value='1'>
session_start();
if (isset($_POST['csvarray'] && $_POST['csvarray'] == 1 && isset($_SESSION['csvarray'])) {
    $csvArray = $_SESSION['csvarray'];
}

您可以将其作为文件上传吗?如果您使用PHP序列化数据,服务器必须已经具有对数据的访问权限。将其存储在临时文件或数据库中,直到您再次需要它。让服务器在一个输入中序列化它,然后将它发送回来,这感觉有点奇怪。你说的“点击一个按钮”是什么意思?我同意你的方法,也可以用javascript创建和附加文件,如果@MrWeix是这样做的:)我认为在会话存储中设置大量数据是不明智的。@尽管我倾向于同意,但这比在服务器和客户端之间来回传递大量数据要明智得多。另外,一兆字节的数据量并不是很大。@MagnusEriksson公平点-但我只是在处理OP的数据。正如我前面提到的,它仍然比在服务器和客户端之间来回发送所有这些数据要好。尽管如此,我并不反对:-)如果任何值包含逗号或换行符,会发生什么情况?然后数据就会被弄乱。你真的不应该手动创建CSV。用于创建csv。由于数据只是临时保存在服务器上,因此使用
serialize()
将更容易。说得好。那会把事情搞砸的。您可能需要用pre_replace之类的东西来转义逗号,或者您可以使用我链接的函数,因为它是一个核心PHP函数,可以为您处理所有这些。如前所述,在这种情况下,将其转换为CSV似乎没有必要。只需存储
serialize()
的结果,然后使用
unserialize()
将其作为数组返回即可。当然,使用简单的方法:D.我一开始没有看到您链接这一点,这就是为什么我建议使用preg_replace。我的意思是,似乎找到最简单的方法是一个好主意!:D
session_start();
if (isset($_POST['csvarray'] && $_POST['csvarray'] == 1 && isset($_SESSION['csvarray'])) {
    $csvArray = $_SESSION['csvarray'];
}