我必须使用 symfony2 控制器创建一个数组,并将数组作为 csv 文件返回,以便用户可以下载它。Wat 是最好的方法吗?我不想将此文件存储在服务器中..
问问题
1001 次
2 回答
0
您可以通过创建数据字符串然后将其作为 Response 对象返回来实现。
例如,您的数据...
$lines = array(
array('some', 'random', 'stuff'),
array('in', 'an', 'array'),
);
设置变量
$delimeter = ','; // Set the delimeter
$enclosure = '"'; // Set the enclosure
$filename = uniqid(); // Set the filename, for this a unique id
循环浏览行和字段,然后将它们组合成一个字符串(如果在现场使用,也可以将外壳加倍)
$content = '';
foreach ($lines as $line)
{
$fields = array();
foreach ($line as $field)
{
$fields[] = $enclosure . str_replace($enclosure,
$enclosure . $enclosure, $field) . $enclosure;
}
$content .= implode($delimeter, $fields) . "\n";
}
创建并返回您的响应对象集作为可下载文件
$response = new Response($content);
$response->headers->set('Content-Type', 'application/csv');
$response->headers->set('Content-Disposition',
sprintf('attachment; filename="%s.csv"', $filename));
return $response;
于 2013-04-14T15:08:50.820 回答
0
它不是真正的 Symfony 相关,但你可以在 PHP 中很容易地做到这一点:
<?php
$lines = array(
array('foo', 'bar', 'baz'),
array('lorem', 'ipsum', 'dolor'),
);
foreach ($lines as $line) {
for ($i = 0; $i < count($line); $i++) {
echo $line[$i];
if ($i < count($line) - 1) {
echo ",";
} else {
echo "\n";
}
}
}
于 2013-04-13T20:48:17.373 回答