首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组到CSV移位行

问数组到CSV移位行
EN

Stack Overflow用户
提问于 2013-12-31 18:34:54
回答 1查看 57关注 0票数 0

我正在尝试将下面的数组转换为一个具有三列三行的可下载csv。由于某些原因,下面的函数创建了四列,而不是三列,其中一些行移到了上面。

我想知道是否有人能帮我找出这是为什么?

事先非常感谢!

代码语言:javascript
复制
$ary = array(
                array("1", "Bob", "Saget"),
                array("2", "Luke", "Skywalker"),
                array("3", "Owen", "Wilson")
            );

$csv = arrayToCsv($ary);
downloadCSV($csv);


function arrayToCsv($array) {
    $csv = array();
    foreach ($array as $item) {
        if (is_array($item)) {
            $csv[] = arrayToCsv($item) . "\n";
        } else {
            $csv[] = $item;
        }
    }
    return implode(',', $csv);
} 


function downloadCSV($csv){
    $fileName = 'customer-list.csv';

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . $fileName);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

    echo $csv;
    exit;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-31 18:43:43

对arrayToCsv()的外部调用为数组的每个元素调用自己。内部调用在子数组的每个元素之间放置逗号,然后在末尾添加一个换行符。外部调用将它们收集到一个新的数组中,然后用逗号分隔它们。这在每一行的开头加了一个额外的逗号,第一行除外。

您需要处理与子数组不同的外部数组。处理子数组时使用,,处理外部数组时用\n实现.

代码语言:javascript
复制
function arrayToCsv($array) {
    return implode("\n", array_map(function($subarray) {
        return implode(",", $subarray);
    }, $array));
}

或者你可以直接用fputcsv

代码语言:javascript
复制
$fp = fopen("php://stdout", "w");
foreach ($ary as $row) {
    fputcsv($fp, $row);
}
fclose($fp);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20861822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档