Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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 数组到CSV移位行_Php_Arrays_Csv - Fatal编程技术网

Php 数组到CSV移位行

Php 数组到CSV移位行,php,arrays,csv,Php,Arrays,Csv,我正在尝试将下面的数组转换为具有三列三行的可下载csv。出于某种原因,下面的函数创建了四列,而不是三列,其中一些行发生了移位 我想知道是否有人能帮我找出原因 非常感谢 $ary = array( array("1", "Bob", "Saget"), array("2", "Luke", "Skywalker"), array("3", "Owen", "Wilson") );

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

我想知道是否有人能帮我找出原因

非常感谢

$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;
}

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

您需要以不同于子阵列的方式处理外部阵列。用
内爆,
处理子数组时,用
\n
内爆处理外部数组时

function arrayToCsv($array) {
    return implode("\n", array_map(function($subarray) {
        return implode(",", $subarray);
    }, $array));
}
或者您可以使用
fputcsv

$fp = fopen("php://stdout", "w");
foreach ($ary as $row) {
    fputcsv($fp, $row);
}
fclose($fp);

您不使用
fputcsv
的任何原因?谢谢!效果很好。我同意你的第一个建议,因为我正在使用的服务器上禁用了文件IO。