//include("mysqlClass.php");

//用指定的键名数组和指定的值数组填充为一个新的数组

//返回的数组长度取决于keys和values数组的最大长度

function array_fill_keys_values($keys,$values){

$keys=array_values($keys);

$values=array_values($values);

$keys_length=count($keys)>count($values)?count($keys):count($values);

$return_arr=array();

if(count($keys)>count($values)){

for($i=0;$i

if($i>=count($values)){

$vs=1;

$return_arr=array_merge($return_arr,array($keys[$i]=>"value".$vs));

$vs++;

}

else{

$return_arr=array_merge($return_arr,array($keys[$i]=>$values[$i]));

}

}

}

else{

for($i=0;$i

if($i>=count($keys)){

$ks=1;

$return_arr=array_merge($return_arr,array("key".$ks=>$values[$i]));

$ks++;

}

else{

$return_arr=array_merge($return_arr,array($keys[$i]=>$values[$i]));

}

}

}

return $return_arr;

}

//使用指定的符号分别连接数组的键名和键值字符串的数组,k键下存储键名字符串,v键下存储值字符串

//

function array_join($arrName,$keySymbol=",",$valuesSymbol=","){

$keys=array_keys($arrName);

$values=array_values($arrName);

$returnArr=array();

$returnArr["k"]=implode($keySymbol,$keys);

$returnArr["v"]=implode($valuesSymbol,$values);

return $returnArr;

}

//获取CSV文件行数

//$CSVfile,CSV文件路径

function lengthOfCSV($CSVfile){

if($file=fopen($CSVfile,"r")){

$i=0;

while($tmp=fgets($file)){

$i++;;

}

return $i;

}

else{

die("lengthOfCSV($CSVfile):ERR:不能打开CSV文件");

}

}

//读取csv到数组

//$filePath, CSV文件 路径

//$num=0,获取的数据条数,0表示不限制

//$titilRow=1, 标题行位置,0表示无标题行;

//$skipRow,需要跳过的行的位置 ,循环读取时很有用

//$isUseKey,是否使用标题行做数组key,可选值为1和0,1为使用,0为不使用,为1时必须制定标题行

function CSV2Arr($filePath,$num=0,$titleRow=1,$skipRow=0,$isUseKey=0){

if($titleRow<1 && $isUseKey==1){die("CSV2Arr():ERR:没有设置标题行,所以无法定义新数组的键名");}

if($num<0){return array("");}

$skipRow=$titleRow+$skipRow;

//if($skipRow>$num){die("CSV2Arr():ERR:");}

$CSV_array=array();

$endPos=$num+$skipRow;

if($isUseKey==0){

if($file=fopen($filePath,"r")){

$num1=0;

$skipPreTitleRow=$skipRow;

while(!feof($file)){

$data=CSVFormatData2Arr($file);

$num1++;

if($num1>$skipRow){//指针到达标题行+跳过的行后一行位置

if($num==0){//读跳过行的后所有数据

$CSV_array[]=$data;

}

else{

if($num1<=$endPos){//取$num行数据后停止

$CSV_array[]=$data;

}

else{

break;//超过指定数目后退出循环

}

}

}

}

fclose($file);

return $CSV_array;

}

else{

die("CSV2Arr():ERR:不能打开文件或参数错误,请检查传入参数以及文件是否存在以及权限设置");

}

}

else{

//$CSV_array[]=array_fill_keys_values($kArr,$data);

if($file=fopen($filePath,"r")){

$num1=0;

$skipPreTitleRow=$skipRow;

while(!feof($file)){

$data=CSVFormatData2Arr($file);

$num1++;

if($num1==$titleRow){//指针到达标题行位置

$kArr=$data;

}

if($num1>$skipRow){//指针到达标题行+需跳过的行后一行位置

if($num==0){//读取标题行后所有数据

$CSV_array[]=array_fill_keys_values($kArr,$data);

}

else{

if($num1<=$endPos){//取$num行数据后停止

$CSV_array[]=array_fill_keys_values($kArr,$data);

}

else{

break;//超过指定数目后退出循环

}

}

}

}

fclose($file);

return $CSV_array;

}

else{

die("CSV2Arr():ERR:不能打开文件或参数错误,请检查传入参数以及文件是否存在以及权限设置");

}

}

}

//读取csv的指定行到数组

//$filePath, CSV文件 路径

//$row,指定行

//$titilRow=1, 标题行位置,0表示无标题行

function getRowFromCSV($filePath,$row,$titleRow=1){

if($file=fopen($filePath,"r")){

$num=0;

$data=array();

while(!feof($file)){

$num++;

if($num

//fgetcsv($file);

CSVFormatData2Arr($file);

continue;

}

else{

$data=CSVFormatData2Arr($file);;

break;

}

}

//array_walk($data,"conv");

fclose($file);

return $data;

}

else{

echo(" getRowFromCSV():ERR:不能打开文件,请检查文件是否存在以及权限设置");

}

}

//CSV格式数据转为数组

//$r,CSV格式数据字符串

function CSVFormatData2Arr($r){

return explode(",",preg_replace("/\s/","",iconv("GBK","UTF-8",fgets($r))));

//return explode(",",preg_replace("/\s/","",fgets($r)));

}

//读取csv到mysql,前提是$table表结构和csv一致

//$filePath, CSV文件 路径

//$num=0,获取的数据条数,0表示不限制

//$titilRow=1, 标题行位置;

//$skipRow,需要跳过的行数 ,循环读取时很有用

//$dbLinkResouce,数据库连接资源,

//$dbname,数据库名称

//$table,要存入的表

//$isCoverTableIfExist,存在原表时是否删除原表再进行插入数据。默认不删除原表,直接插入数据。

function insertToMysqlFromCSV($filePath,$num=0,$titleRow=0,$skipRow=0,$dbHost="127.0.0.1",$dbUser="root",$dbPass="123456",$dbname="",$table="",$isCoverTableIfExist=0){

if($titleRow<0){die("ERR:未指定标题行");}

if(!$SQLlink=@mysql_connect($dbHost, $dbUser, $dbPass)){

die( 'MYSQL 连接数据库失败,请确定数据库用户名,密码设置正确
');

}

else{

mysql_query("set names 'utf8'");

if(!@mysql_select_db($dbname,$SQLlink)){

die( "insertToMysqlFromCSV():ERR:数据库名称错误!");

}

$colsArr=array_join(getRowFromCSV($filePath,$titleRow,0),',',"` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci,`");//取得标题行作为列名

$colsStr="`".$colsArr["v"]."` varchar(100)";

if($isCoverTableIfExist==1) {

$sql_str="CREATE TABLE IF NOT EXISTS `".$table."`(

`id` INT(11) NOT NULL PRIMARY KEY AUTO_INCREMENT ,

".

$colsStr

."

)DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = MyISAM;";

if(!@mysql_query("DROP TABLE IF EXISTS `".$table."`;",$SQLlink)){

die( "insertToMysqlFromCSV():ERR:删除表时出错!");

}

if(!@mysql_query($sql_str,$SQLlink)){

die( "insertToMysqlFromCSV():ERR:执行建表出错!$sql_str");

}

}

}

$CSVData=CSV2Arr($filePath,$num,$titleRow,$skipRow,1);

$colsNameStr="`";

if(!$rs=@mysql_query("select COLUMN_NAME from information_schema.columns where table_schema = '".$dbname."' and table_name = '".$table."';")){

die( "insertToMysqlFromCSV():ERR:表名称错误!");

};

if(!mysql_fetch_array($rs)){die("指定的表没有字段");}

while($rsA=mysql_fetch_array($rs)){

$colsNameStr=$colsNameStr.$rsA[0]."`,`";

}

$colsNameStr=substr($colsNameStr,0,strlen($colsNameStr)-2);

for($i=0;$i

$sqlArr=array_join($CSVData[$i],"`,`","','");

$insertSQLStr="insert into `".$table."`(".$colsNameStr.") values('".$sqlArr["v"]."')";

if(!@mysql_query($insertSQLStr,$SQLlink)){

die( "insertToMysqlFromCSV():ERR:插入CSV的第".($titleRow+$i+$skipRow+1)."行(包含标题行)数据出错,请检查!".mysql_error().",SQL语句为:\r\n
$insertSQLStr");

}

}

mysql_close($SQLlink);

}

function viewCSV($filePath,$num=1,$skipRows=0){//仅适用于小文件, $num 为要显示的行数,$skipRows要跳过的行数,如标题行和标题前面的行

if($file=fopen($filePath,"r")){

$preHTMLstr='

$i=0;

$num1=1;//当前读取行序号

$num3=$num+$skipRows;//最后行序号

$num2=0;//行序号

while(!feof($file)){

if($num1<=$skipRows){fgets($file,filesize($filePath));$num1++;continue;}

if($num>0 && $num1<=$num3){

$dataTmp=fgets($file,filesize($filePath));

$num2++;

if($num==1){

$preHTMLstr=$preHTMLstr."

序号".str_replace(",","",iconv("GBK","UTF-8",$dataTmp))."";

}

else{

$preHTMLstr=$preHTMLstr."

".($num2)."".str_replace(",","",iconv("GBK","UTF-8",$dataTmp))."";

}

$num1++;

}

else{

break;

}

}

$preHTMLstr=$preHTMLstr."

";

fclose($file);

return $preHTMLstr;

}

else{

die("viewCSV():ERR:不能打开文件,请检查文件是否存在以及权限设置");

}

}

?>

一键复制

编辑

Web IDE

原始数据

按行查看

历史

最新文章

  1. c语言算法6,c语言6函数和算法.ppt
  2. MySQL读写分离一主多从实现
  3. 算法导论笔记:06堆排序
  4. 单片机8×8点阵显示简单汉字的程序_LED显示屏的显示原理原来是这样,科技实现梦想...
  5. python-3高级特征
  6. 一步一步安装服务器监视软件MRTG
  7. Django Restful API Class Based View
  8. udp java 实例_udp例子,javaudp简单实例分享
  9. PHP 之建行龙支付-主扫(客户扫码商家二维码),获取二维码信息
  10. linux 即时通讯,Linux即时通讯Pidgin简洁漂亮的插件Screenlets[图文]
  11. vue 统计中英文字符串长度_Ant Design Vue实现区分中英文分全角/半角字符长度校验功能...
  12. 新一轮众筹淘金热——DAOs
  13. 500台机以上大型网吧设计方案
  14. 建筑力学与结构【10】
  15. swift4.0 方法监听Selector写法总结
  16. 【HUE】问题汇总(持续更新)
  17. 网络工程设计教程系统集成方法第3版-第1章 网络工程设计概述
  18. ARGB1555内部存储空间的大小与ARGB转换方式
  19. 无用功[By tina]
  20. cmd控制台的点阵字体不能调整大小怎么办?

热门文章

  1. centos7 yum 安装mariadb
  2. 通过HTML5 Visibility API检测页面活动状态
  3. 源码安装Tomcat及配置
  4. Linux 系统下对目录扩容的方法
  5. 如何在 Zabbix 执行远程主机的脚本或指令?如何用 Zabbix 监控网站的访问量?
  6. Windows 10中安装.net framework提示已经安装
  7. 高并发情况下修改系统参数
  8. 奥威软件大数据bi_哪家BI软件能做Sql server的数据可视化分析?
  9. 【Python-3.3】函数中的可变参数和关键字参数
  10. 【PL/SQL】开发程序