1 起因
最近在项目中经常会使用foreach来遍历数组,有的时候一层循环往往不能解决问题,需要使用两层或者多层循环来遍历数据,尤其是两层循环中的数据具有某种关联性的时候,之前项目组的人包括我一直都是使用双层循环来解决这种有关联数据的遍历;但是,有的时候感觉总是双层循环很丑,能否拆分成两个循环来,而且单层循环的性能要比双层好。
2 例子+解决
例如一个集合A (idA,gno,dataindex...),集合B(gno,idB,data...),因为某些原因需要找出集合A和集合B中gno相等的数据,并且返回一个list,这时候我想大多数人的想法是使用双层循环来遍历,例如这样:
foreach($listA as $v){
foreach($listB as $val) {
if($v->gno == $val->gno)
{//to do }
}
}
其实可以这样写,
foreach($listA as $v){
$list[$v->gno] = $v
}
我们用一个新的list来保存listA中的数据,并使用关联的属性作为键值,这样再来遍历listB,如下:
foreach($listB as $key=>$val){
$list[$key]->propertyNeed = $list[$val->gno]->propertyNeed
}
这样的方式就解开双层循环,性能有所提升。
3 总结
以上的想法是我在项目中遇到的一个小小提升,但是我认为每一个小的提升必将导致大的改变。当然这个方式并不适合所有的情况。如果有遇到这种情况的少侠,希望能够给与给好的建议,也是做个记录。
--every step will make a difference.











网友评论