将csv文件内容转换为数组 方便导入数据库 /** * 将csv文件内容转换为数组 方便导入数据库 * @param string $path 文件路径 * @param string $column 表格的列数 * @param array $attrName 一维数组,数据表
/** * 将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);