循环执行结构
wile、for
找到最小可重复的单元。合理的调整重复单元各个操作的顺序,使其更符合逻辑。如果实在没有办法必要,提前手写第一圈循环。或者手写最后一圈循环。
while-for
循环内部嵌套if。但是if又不是必要的,只是在最后的时候,才需要判断,而前面的又不需要。
有几个这样的场景,1、join函数(类似的还有 where中的and),2、base64函数。
场景的代码如下:
<?php
$arr = range(1,3);
$len = count($arr);
$resut = '';
foreach($arr as $k=>$v){
if($k==$len-1){
$resut .= $v;
continue;
}
$resut .= $v . ' and ';
}
echo $resut; //1 and 2 and 3
但是上面的代码,是能优化的。if大部分场合,都是命中失败的,也就是我们希望for里面,尽量减少这个if判断,提高代码的执行效率。所以,上面代码优化为:
<?php
$arr = range(1,3);
$len = count($arr);
$resut = '';
// 处理前面不需要if的部分
foreach(array_slice($arr,0,-1) as $k=>$v){
$resut .= $v . ' and ';
}
//最后一圈循环
$resut .= $arr[$len-1];
echo $resut;
这样就消灭了for中的if判断。但是,上面的代码,也确实有代价,要分开处理,代码势必要比前一种复杂一些。性能有提升?也未必。(所以写代码,我个人觉得实现一种方案,然后再优化)
step不等于1
按顺序遍历,自己计算在大的数组中的索引。
Function get_top()
' 通过遍历找到第一个可见元素的top,作为调整的依据
Dim cur ' tables的元素
For i = 1 To 30
' index = start_index + (i - 1) * 3 + 2 可以计算一个索引,然后更直接的,找到当前遍历的元素
cur = tables[start_index + (i - 1) * 3 + 2]
If cur["right"] - cur["left"] > 30 Then
get_top = cur["top"]
print_msg "获取到第一个可见游戏(左:"& cur["left"] &",顶:"& cur["top"] &",右:"& cur["right"] &",底:"& cur["bottom"] &")的高度为:"& cur["top"] &"。"
Exit Function
End If
Next
get_top = -1 '没有找的的情形
End Function
或者,直接设置stop。