新手上路,如何过滤数据,避免重复写入大佬们有什么好的建议?

当前使用的laravel框架,业务需求:读取上传的Excel数据为了避免重复上传我检查了文件的hash,但是:如果文件内容被稍微更改,或其中包含早已写入数据库的值,就需要过滤这部分数据我现在的做法是:双foreach根据各自结果集的部分条件判断来unsert原有数据,可以剔除重复的列;显而易见,如果两个结果列数各大于100,这个执行过程就要循环大于10000次,??感觉很消耗资源,有没有更好的解决办法呢??---请指教
foreach($trackas$k=>$v){
foreach($new_arras$ak=>$av){
if($av['pur_id']==$v->pur_id&&$av['num']==$v->num){
unset($new_arr[$ak]);
}
}
}
蝴蝶刀刀
浏览 303回答 2
2回答

哆啦的时光机

先用一个foreach做一个pur_id=>num的映射关系,然后通过foreach判断内容是否已存在于map内,存在则unset,这样虽然分了两次,但实际可以当作一次循环,第一个foreach可以使用array_column来代替$map=[];foreach($trackas$k=>$v){$map[$v->pur_id]=$v->num;}unset($track);foreach($new_arras$ak=>$av){if(isset($map[$av['pur_id']])&&$av['num']==$map[$av['pur_id']])unset($new_arr[$ak]);}$map=array_column($track,'num','pur_id');unset($track);foreach($new_arras$ak=>$av){if(isset($map[$av['pur_id']])&&$av['num']==$map[$av['pur_id']])unset($new_arr[$ak]);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript