0

我必须使用 symfony2 控制器创建一个数组,并将数组作为 csv 文件返回,以便用户可以下载它。Wat 是最好的方法吗?我不想将此文件存储在服务器中..

4

2 回答 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 回答