Thinkphp关于文件上传重复的问题

解决上传文件重复问题

这篇文章主要介绍一下在我们上传文件中会出现一些重复上传的问题,那么这些问题应该怎么解决呢?

事例:例如我们想要将一个写有学生信息的csv文件导入到数据库的学生表中。那么我们将面临一些重复问题。

  1. 在csv文件中,存在多条完全相同的信息(简单来说也就是一个同学存在多次 )。
  2. 第一次导入成功后,第二次导入后,已经存在的同学便不需要在导入到学生表中了。

那么我们来想一个方法:

  • 取的student表中的学号,将学号存入一个数组中($arrNo)。
  • 循环读取CSV文件中的学生信息。
  • 用CSV文件中的学号去和$arrNo中的学号进行比较
  • 如果已经存在:那么则继续读取下一行数据进行比较。
  • 如果不存在,①将CSV文件中的学号追加到$arrNo中(为了防止csv文件中,存在多条完全相同的信息,这样做之后第二次遇到这个信息,就会显示已经存在了。)②将CSV文件中的这条数据存放入一个空数组($arr)中。
  • 最后我们将$arr这个数组中的内容添加到数据库学生表中就解决了重复问题。

下边我们来看一个简单的图,图中画出了上边我们的思维:


代码如下:

$fp=fopen($file, 'r');//只读方式打开CSV文件,将文件指针指向文件头
        if ($fp) {
	        $arrNo=M('student')->getField('no',true);//一维数组获取原表所有的学号存入数组
	        //新建一个数组(因为CSV文件中的下标从0开始,后边我们需要合并两个数组)
	        $filed=array('no','name','sex');
	        $model=M('student');//实例化数据表
	        $arr=array();//创建一个空数组
                //循环读取csv文件
	        while (($row=fgetcsv($fp,1000,','))){
               //在文件中学号下标为0,判断是否存在在arrNo中存在输出已存在不存在时将新建的用字段作为下标的信息存入arr空数组中,并且存入arrNo中,以防下一次查询				
                if(in_array($row['0'], $arrNo)){
                    echo $row['0'] . "已经存在!";
                }else{
                	//创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其。将数据添加到空数组$arr中
                    $arr[] = array_combine($filed, $row);
                    $arrNo[]=$row['0'];//将学号追加到$arrNo中
                }
				if (count($arr)==1000) {
					$model->addAll($arr);//最后将$arr中的数据添加到数据库中
					unset($arr);
				}
			}
            if (count($arr)>0) {
            	$model->addAll($arr);
            }
            $this->show('插入成功','utf8');
		}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值