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

php代码优化建议

php代码优化建议

ABOUTYOU 2019-05-24 10:05:34
代码如下:$list数据量是上千条;$userJobnumberArray大概有几万条数据。但是这种循环执行起来非常慢,请问有什么优化的方法?$list=array('1'=>array('1','6','124'),'2'=>array('2','5','156'),'4'=>array('4','734','221'));$userJobnumberArray=array(array('deptid'=>'1','jobnumber'=>'X1414'),array('deptid'=>'734','jobnumber'=>'34j6'),);$userGroup=array();foreach($listas$k=>$v){foreach($userJobnumberArrayas$l=>$j){if(in_array($j['deptid'],$v)){$userGroup[$k][]=$j['jobnumber'];unset($userJobnumberArray[$l]);}}}
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

其实,你只需要先把$userJobnumberArray数据的先用一次循环把他改成$userJobnumberArray=[deptid=>jobnumber]这个格式,然后在执行你的外循环,内循环就不要了,直接判断isset($userJobnumberArray[deptid]),如果存在就直接取就好了.
下面这个如何???能优化地方,也就是in_array()这个时间复杂度为n的操作变成了数组索引调用这个复杂度为1的调用。
$list=array(
'1'=>array('1','6','124'),
'2'=>array('2','5','156'),
'4'=>array('4','734','221')
);
$userJobnumberArray=array(
array(
'deptid'=>'1',
'jobnumber'=>'X1414'
),
array(
'deptid'=>'734',
'jobnumber'=>'34j6'
),
);
$ujba=[];
foreach($userJobnumberArrayas$v){
$ujba[$v['deptid']]=$v['jobnumber'];
}
unset($userJobnumberArray);
$userGruop=[];
foreach($listas$k=>$v){
foreach($vas$deptid){
if(isset($ujba[$deptid]))
$userGruop[$k][]=$ujba[$deptid];
}
}
print_r($userGruop);
                            
查看完整回答
反对 回复 2019-05-24
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

毕竟当数组非常大的时候,数组是将数据一次性加载到内存里,这样内存受不了,肯定会出现内存溢出这种问题。
怎么解决?
PHP手册中提供了一种yield方法
yield返回的是依次输出这些值的一个迭代器。
这种方法的好处是在你处理大数据集合的时候不用一次性的加载到内存中
也就是说你甚至可以处理无限大的数据流。
快用上吧~
                            
查看完整回答
反对 回复 2019-05-24
  • 2 回答
  • 0 关注
  • 339 浏览
慕课专栏
更多

添加回答

举报

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