当前位置 : 主页 > 网络编程 > PHP >

CSV文件的导出与导入

来源:互联网 收集:自由互联 发布时间:2021-06-28
将csv文件内容转换为数组 方便导入数据库 /** * 将csv文件内容转换为数组 方便导入数据库 * @param string $path 文件路径 * @param string $column 表格的列数 * @param array $attrName 一维数组,数据表
将csv文件内容转换为数组 方便导入数据库
/**
 * 将csv文件内容转换为数组 方便导入数据库
 * @param string $path 文件路径
 * @param string $column 表格的列数
 * @param array $attrName 一维数组,数据表字段名,
 * */
function csv2array($path, $column, $attrName = array())
{
    set_time_limit(0);
    $flag = false;
    $code = 0;
    $msg = '未处理';
    $filesize = 1; //1MB
    $maxsize = $filesize * 1024 * 1024;
    $max_column = 1000;

    //检测文件是否存在
    if ($flag === false) {
        if (!file_exists($path)) {
            $msg = '文件不存在';
            $flag = true;
        }
    }
//        检测文件格式
    if ($flag === false) {
        $ext = substr($path, strrpos($path, '.'));
        $ext = str_replace('.', '', $ext);
//            var_dump($ext);
        if ($ext != 'csv') {
            $msg = '只能导入CSV格式文件';
            $flag = true;
        }
    }

    //检测文件大小
    if ($flag === false) {
        if (filesize($path) > $maxsize) {
            $msg = '导入的文件不得超过' . $maxsize . 'B文件';
            $flag = true;
        }
    }

    //读取文件
    if ($flag == false) {
        $row = 0;
        $handle = fopen($path, 'r');
        $dataArray = array();
        while ($data = fgetcsv($handle, $max_column, ",")) {
            $num = count($data);
            if ($num < $column) {
                $msg = '文件不符合规格真实有:' . $num . '列数据';
                $flag = true;
                break;
            }

            if ($flag === false) {
                for ($i = 0; $i < $column; $i++) {
                    if ($row == 0) {
                        break;
                    }
                    //组建数据
                    $dataArray[$row][$i] = $data[$i];
                }
            }
            $row++;
        }
    }

    //给数据添加字段名
    array_walk($dataArray, function (&$value) use ($attrName) {
        $value = array_combine($attrName, $value);
    });
    $dataArray = array_values($dataArray);//返回数组中所有的值并给其建立数字索引
    return $flag ? $msg : $dataArray;
}
导出csv文件
/*
 * 导出csv文件
 * @param array $list 数据库查询结果,二维数组
 * @param array $title 导出表头名称 ,一维数组,如:array('用户ID','用户名','绑定邮箱','绑定手机','注册时间','注册IP');
 */
function exportCsv($list, $title)
{
    set_time_limit(0);
    $file_name = "CSV" . date("mdHis", time()) . ".csv";
    header('Content-Type: application/vnd.ms-excel');
    header('Content-Disposition: attachment;filename=' . $file_name);
    header('Cache-Control: max-age=0');
    $file = fopen('php://output', "a");
    $limit = 1000;
    $calc = 0;
    foreach ($title as $v) {
        $tit[] = iconv('UTF-8', 'GB2312//IGNORE', $v);
    }
    fputcsv($file, $tit);
    foreach ($list as $v) {
        $calc++;
        if ($limit == $calc) {
            ob_flush();
            flush();
            $calc = 0;
        }
        foreach ($v as $t) {
            $tarr[] = iconv('UTF-8', 'GB2312//IGNORE', $t);
        }
        fputcsv($file, $tarr);
        unset($tarr);
    }

    unset($list);
    fclose($file);
    exit();
}


//$list=M("members")->field($field)->limit(10000)->select();
//$csv_title=array('用户ID','用户名','绑定邮箱','绑定手机','注册时间','注册IP');
//exportCsv($list,$csv_title);


//$arr = array(array('name'=>'张三','year'=>'20','sex'=>'男'),
//    array('name'=>'李四','year'=>'25','sex'=>'男'),
//    array('name'=>'王五','year'=>'19','sex'=>'女')
//);
//
//$title=array('姓名','年龄','性别');
//exportCsv($arr,$title);
上一篇:ngnix配置 NMP
下一篇:curl-get-post请求
网友评论