本文主要和大家分享PHP中的去重方法詳解和檔案下載,在php中檔案匯入處理程序中,經常會遇到重複事件,那麼就需要我們去重,然後進行下載。
1.思想
先設定一個儲存主鍵數組,和一個空數組。解析檔案,然後看要傳入的數組中主鍵數組中是否存在,進行檢測。設定附件上傳目錄。進行上傳。
2.方法
如若資料庫中本身就存在資料,很容易匯入的資料重複,所以首先把主鍵放入一個主鍵數組中,再建立一個新一維數組,然後解析csv,如果解析出來的話,就應該把上面已經定義好的作為鍵名的數組和解析後的csv進行合并(array_combine)。產生一個新數組。那麼,就應該判斷要匯入的資料中的主鍵和資料庫本身的是否重複(in_array),如若重複,則顯示這個學號已重複。如若沒有,則把這個學號儲存到主鍵數組中,並把這個資料內容儲存到原本已定義的數組中。
3.代碼
if($fp){ $fields=array('no','name','sex'); $model=M('student'); $arrno=$model->getField('no',true); $arr=array(); while(($row=fgetcsv($fp,1000,","))!==false){ $row=array_combine($fields, $row); if(in_array($row['no'],$arrno)){ echo $row['no']."學號已經存在"."<br>"; }else{ $arrno[]=$row['no']; $arr[]=$row; // dump($arr); // exit; echo $row['no']."學號已經匯入"."<br>"; } if(count($arr)==1000){ $model->addAll($arr); unset($arr); } } dump($arr); if(count($arr)>0){ $model->addAll($arr); } $this->show('匯入成功'); // $this->download(); }
下載
public function download(){ $file_name=$file; $file_dir="/Public/Download/"; if(!file_exists($file_dir . $file_name)){ echo "檔案找不到"; exit(); }else{ $file=fopen($file_dir, $file_name,"r"); Header("Content-type:application/octet-stream"); Header("Accept-Ranges:bytes"); Header("Accept-Length:".filesize($file_dir.$file_name)); Header("Content-Disposition:attachment;filename".$file_name); echo fread($file,filesize($file_dir.$file_name)); fclose($file); exit(); } }