使用PHP生成並導出CSV文件

CSV文件是以純文本形式存儲的,通常以逗號爲分隔符。
這裏主要簡單介紹下如何導出CSV文件。瀏覽器

1、瀏覽器導出CSV文件格式

/**
 * 導出CSV文件
 */
function exportCsv()
{
    // 須要導出的內容
    $data = [
        ['name' => '張三', 'score' => '80'],
        ['name' => '李四', 'score' => '90'],
        ['name' => '王五', 'score' => '60'],
    ];
    // 文件名,這裏都要將utf-8編碼轉爲gbk,要不可能出現亂碼現象
    $filename = $this->utfToGbk('導出csv文件.csv');

    // 拼接文件信息,這裏注意兩點
    // 一、字段與字段之間用逗號分隔開
    // 二、行與行之間須要換行符
    $fileData = $this->utfToGbk('姓名, 分數') . "\n";
    foreach ($data as $value) {
        $temp = $value['name'] . ',' .
                $value['score'];
        $fileData .= $this->utfToGbk($temp) . "\n";
    }

    // 頭信息設置
    header("Content-type:text/csv");
    header("Content-Disposition:attachment;filename=" . $filename);
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Expires:0');
    header('Pragma:public');
    echo $fileData;
    exit;
}


/**
 * 字符轉換(utf-8 => GBK)
 */
function utfToGbk($data)
{
    return iconv('utf-8', 'GBK', $data);
}

2、在服務器生成CSV文件

/**
 * 下載CSV文件
 */
public function downLoadCsv()
{
    // 須要導出的內容
    $data = [
        ['name' => '張三', 'score' => '80'],
        ['name' => '李四', 'score' => '90'],
        ['name' => '王五', 'score' => '60'],
    ];
    // 文件名,這裏都要將utf-8編碼轉爲gbk,要不可能出現亂碼現象
    $filename = $this->utfToGbk('生成csv文件.csv');

    // 拼接文件信息,這裏注意兩點
    // 一、字段與字段之間用逗號分隔開
    // 二、行與行之間須要換行符
    $fileData = $this->utfToGbk('姓名, 分數') . "\n";
    foreach ($data as $value) {
        $temp = $value['name'] . ',' .
            $value['score'];
        $fileData .= $this->utfToGbk($temp) . "\n";
    }

    $filePath = __DIR__ . '/' . $filename;
    // 將一個字符串寫入文件
    file_put_contents($filePath, $fileData);
    return $filePath;
}


/**
 * 字符轉換(utf-8 => GBK)
 */
public function utfToGbk($data)
{
    return iconv('utf-8', 'GBK', $data);
}
相關文章
相關標籤/搜索