如何优化以下代码
我需要像这样运行3组循环:
for($i=1;$i<=$count-1;$i++){
for($j=$i+1;$j<=$count;$j++){
// do some query use $i and $j
}
}
for($i=1;$i<=$count-2;$i++){
for($j=$i+1;$j<=$count-1;$j++){
for($k=$j+1;$k<=$count;$k++){
// do some query use $i and $j and $k
}
}
}
for($i=1;$i<=$count-3;$i++){
for($j=$i+1;$j<=$count-2;$j++){
for($k=$j+1;$k<=$count-1;$k++){
for($l=$k+1;$l<=$count;$l++){
// do some query use $i and $j and $k and $l
}
}
}
}
有没有办法简化代码,也许是将循环连接在一起?
谢谢!
答案 0 :(得分:2)
这应该做(未经测试):
for($i = 1; $i <= $count - 3; $i++) {
for($j = $i + 1; $j <= $count; $j++) {
// i,j query
if($j > $count - 2) {
continue;
}
for($k = $j + 1; $k <= $count; $k++) {
// i,j,k query
if($k > $count - 1) {
continue;
}
for($l = $k + 1; $l <= $count; $l++) {
// i,j,k,l query
}
}
}
}
请注意,查询不再按原始顺序排列。
如前所述,如果不知道正在运行的查询,就无法进一步优化这一点。
答案 1 :(得分:1)
最大的问题是内部循环运行多次。您可以通过检查循环内的i === 1
和j === 2
并仅运行相应的代码(如果为true)来解决此问题。
答案 2 :(得分:0)
微优化: 使用
++$i
而不是
$i++
和$ j ++,$ k ++和$ l ++
的等价物但是你在这些循环中做了什么:完全有可能你做一些查询(数据库?)可以改变以完全删除循环......这将比任何微优化更有效