簡體   English   中英

數組到CSV移位的行

[英]Array to CSV shifted rows

我試圖將以下數組轉換為具有三列和三行的可下載的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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM