如何优化下面的代码,
我需要像这样运行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
}
}
}
}有没有一种方法可以简化代码,也许是将循环连接在一起?
谢谢!
发布于 2010-07-06 20:08:39
微优化:使用
++$i而不是
$i++与$j++、$k++和$l++等效
但是您在这些循环中做了什么:您完全有可能执行一些查询(数据库?)可以更改为完全移除循环。这比任何微观优化都要有效得多
发布于 2010-08-16 15:27:00
这应该可以做到这一点(未测试):
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
}
}
}
}请注意,查询不再按其原始顺序排列。
正如已经说过的,如果不知道您正在运行的查询,就没有办法进一步优化它。
发布于 2010-07-06 18:12:14
最大的问题是内部循环会多次运行。您可以通过检查循环中的i === 1和j === 2并仅在为真时运行适当的代码来解决此问题。
https://stackoverflow.com/questions/3185288
复制相似问题