PHP导出数据为CSV

lys2019年07月23日 0条评论

PHP导出数据为CSV格式,PHP导出CSV类编写,自定义一个CSV导出类,持续性的写入到文件,制表符\t边界处理

<?php
/**
 * 数据导出为csv
 * User: lys
 * Date: 2019/7/22
 * Time: 16:51
 */
class PHPCsv{
    /**
     * @param string $filedir
     * @param string $fileName
     * @param array $headArr
     * @param array $data
     * @return bool|string
     */
    public static function createCsv($filedir = '',$fileName = '',$headArr = [],$data = []){
        if(empty($filedir)
            || empty($fileName)
            || empty($fileName)
            || empty($headArr)
            || !is_array($data)
        ){
            return false;
        }
        //文件夹
        if(!is_dir($filedir)){
            mkdir($filedir,0777,true);
        }
        $filedir = realpath($filedir);  //不存在的文件使用该函数返回的是false
        //路径
        $fileName .= date('Y-m-d_His',time()).'.csv';
        $filePath = $filedir.'/'.$fileName;
        //生成csv文件
        $fp = fopen($filePath, 'w');
        $header = implode("\t,", $headArr)."\t"  . PHP_EOL;
        $header = iconv("UTF-8", "GBK//IGNORE", $header);
        $content = '';
        foreach($data as $line => $val)
        {
            $values = array_values($val);
            $str = implode("\t,", $values)."\t" . PHP_EOL;
            $content .= iconv("UTF-8", "GBK//IGNORE", $str);
        }
        $csv = $header.$content;
        // 写入数据
        fwrite($fp,$csv);
        //关闭文件句柄
        fclose($fp);
        return $filePath;
    }

    /**
     * 数据添加
     * @param string //文件路径
     * @param array $data //数据
     * @return string
     */
    public static function appendCsv($filePath,$data = []){
        $fp = fopen($filePath, 'aw+');
        $content = '';
        foreach($data as $line => $val)
        {
            $values = array_values($val);
            $str = implode("\t,", $values) ."\t" . PHP_EOL;
            $content .= iconv("UTF-8", "GBK//IGNORE", $str);
        }
        $csv = $content;
        // 写入数据
        fwrite($fp,$csv);
        //关闭文件句柄
        fclose($fp);
        return $filePath;
    }
}