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