为了账号安全,请及时绑定邮箱和手机立即绑定

有没有童鞋遇到过同样的问题:如何过滤数据,避免重复写入谢谢哈~

有没有童鞋遇到过同样的问题:如何过滤数据,避免重复写入谢谢哈~

茅侃侃 2019-10-16 10:37:21
当前使用的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]);}}}
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

先用一个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]);
}
                            
查看完整回答
反对 回复 2019-10-16
  • 2 回答
  • 0 关注
  • 390 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信