0

我正在尝试熟悉 for 循环,因为我只了解基础知识。我正在尝试简化下面的代码

                    $round1 = $max / 2;
                    $round2 = $round1 + ($max / 2 / 2);
                    $round3 = $round2 + ($max / 2 / 2 / 2);
                    $round4 = $round3 + ($max / 2 / 2 / 2 / 2);
                    $round5 ...

有了这个:-

                    $round = array($max/2);

                    for ($i=1;$i<$max;$i++) {
                        $round[] = $round[$i -1] + $max/pow(2, $i + 1);
                    }   

现在是下一个代码:-

                    if($matchno <= $round[0]) {
                        $scores_round1.= '['.$score1.', '.$score2.'],'; 
                    }
                    if($matchno > $round[0] AND $matchno <= $round[1]) {
                        $scores_round2.= '['.$score1.', '.$score2.'],'; 
                    }       
                    if($matchno > $round[1] AND $matchno <= $round[2]) {
                        $scores_round3.= '['.$score1.', '.$score2.'],'; 
                    }
                    if($matchno > $round[2] AND $matchno <= $round[3]) {
                        $scores_round4.= '['.$score1.', '.$score2.'],'; 
                    }

可以在 for 循环中使用上述内容以避免使用 if() 吗?

感谢帮助

4

3 回答 3

1

You can check for round1 and for the rest:

 for ($i=1;$i<$max;$i++) {
         if($matchno>$round[$i] AND $matchno <= $round[$i+1])
            ${'scores_round'.$i}.='['.$score1.', '.$score2.'],'; 
     }
于 2013-08-13T12:53:33.893 回答
0
for($i=0;$i< count($round); $i++){
    if($match < $round[$i]){
        ${"scores_round".$i}.= '['.$score1.', '.$score2.'],';
        break;
        }
}
于 2013-08-13T13:00:41.260 回答
0

通过观察 if 语句,我们注意到一些事情: 首先,没有 *else if* 语句。这意味着必须执行所有 if 语句检查。此外,还有一个检查 $matchno 是否小于 $round[0],而不检查是否大于这个 if 语句(第一个)。另一点是 $scores_roundX 以 X=1 而不是 0 开头。显然,如果在循环内,则必须使用一个。因此,我们将形成循环代码,制作一些小技巧:

for($i = -1; $i < count($round)-1 ; ++$i){
    if(($i = -1 OR $matchno > $round[$i]) AND ($matchno <= $round[$i+1])){
        ${"scores_round".$i+2} .= '['.$score1.', '.$score2.'],';
    }
}
  • 我们将使用 -1 初始化 THE $i,以将其用于第一条语句的执行。
  • 我们将 as for 语句中的 $ 小于数组的计数减 1(因为我们在 if 语句中使用 $i+1 进行索引,在循环内)。
  • 只有当 $i 不是 -1 时,我们才会执行大于检查,这将在第二次检查时发生(如果在初始代码中是第二次检查)。在这里,我们还使用了语言的部分评估功能,这意味着在 OR 子语句中,如果第一部分为真,则不评估第二部分。
  • 我们将在 $scores_round 形成时生成 $i+2,因为我们在 for 循环中从 -1 开始。
于 2013-08-13T13:34:12.710 回答