当前使用的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]);}
添加回答
举报
0/150
提交
取消