将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);
