我正在从我的数据库中读取一些数据,我想将其转换为要显示的csv。但是,我不想写入文件 - 有没有办法在不使用临时文件的情况下将数组数据转换为csv字符串?
答案 0 :(得分:0)
是的,有。可以使用php://memory
,就像它是文件输出流一样,尽管它实际上只写入内存而不是文件。
例如,要将数组$data
转换为csv格式$rows
:
$rows = array();
$fd = fopen('php://memory','rw');
foreach($data as $datum) {
fputcsv($fd, $datum);
rewind($fd);
$rows[] = trim(fgets($fd));
rewind($fd);
}
fclose($fd);
在这里你可以看到我打开内存进行读/写,然后对于每个数据集,我将数据写为csv - 然后倒回到内存的开头 - 然后读取内存的内容。请注意,fputcsv总是使用换行符终止该行,这就是为什么我可以使用fgets来读取行而不必担心溢出。如果您要存储包含换行符的数据,则可能需要稍微更改一下,因为fgets当时不会工作,您需要进行更精细的检查/验证,以及{{1}的最大大小}在php.ini中定义。