PHP读取excel文档存入数据库
视图代码:
<form action="goods.php?act=excelfile" method="post" enctype="multipart/form-data" name="theForm"> <span>上传记录xxxxx.csv文档</span> <input name="file" type="file" size="40"> <input name="submit" type="submit" /> <input type="hidden" name="charset" value="GB2312"> </form>
控制器代码:
$filename = $_FILES['file']['name']; //类型验证 if (strpos($_FILES['file']['name'], 'csv') === false) { echo "请使用.csv文档"; exit(); } $field_list = array_keys(array( 'goods_id' => '', 'jiegou' => '', 'caizhi' => '', 'fengge' => '', 'pinpai' => '', )); // 字段列表 $goods_list = get_data_list($field_list); //$goods_list就是所需数组,循环插入即可
function get_data_list($field_list) { if (!$field_list) return array(); /* 将文件按行读入数组,逐行进行解析 */ $line_number = 0; $arr = array(); $goods_list = array(); $data = file($_FILES['file']['tmp_name']); foreach ($data AS $line) { // 跳过第一行 if ($line_number == 0) { $line_number++; continue; } // 转换编码 if (($_POST['charset'] != 'UTF8') && (strpos(strtolower(EC_CHARSET), 'utf') === 0)) { $line = ecs_iconv($_POST['charset'], 'UTF8', $line); } // 初始化 $arr = array(); $buff = ''; $quote = 0; $len = strlen($line); for ($i = 0; $i < $len; $i++) { $char = $line[$i]; if ('\\' == $char) { $i++; $char = $line[$i]; switch ($char) { case '"': $buff .= '"'; break; case '\'': $buff .= '\''; break; case ','; $buff .= ','; break; default: $buff .= '\\' . $char; break; } } elseif ('"' == $char) { if (0 == $quote) { $quote++; } else { $quote = 0; } } elseif (',' == $char) { if (0 == $quote) { if (!isset($field_list[count($arr)])) { continue; } $field_name = $field_list[count($arr)]; $arr[$field_name] = trim($buff); $buff = ''; $quote = 0; } else { $buff .= $char; } } else { $buff .= $char; } if ($i == $len - 1) { if (!isset($field_list[count($arr)])) { continue; } $field_name = $field_list[count($arr)]; $arr[$field_name] = trim($buff); } } $goods_list[] = $arr; } return $goods_list; }