0

同様の繰り返しに気付き、コードの長さを最小限に抑えることができる場合は、これに単一の for ループを使用して回避しようとしています。

代わりにループを形成できれば、スイッチケースを使用する必要はありませんか?

  1. $returnNo 変数は 5 から始まり、各ケースに 2 を掛けてから 1 を引きます。

  2. 「$a<=」と表示されている場合、5 から始まり、各ケースに 2 を掛けてから 3 を足します。

  3. if($matchno == 7) で始まる if() ステートメント、各ケースに 2 を掛けてから 1 を足したもの。

  4. if($matchno == 8) で始まる最後の if() ステートメント、各ケースに 2 を掛けたもの。

  5. ケース 64 まで実行しましたが、実際には 512 まで進みます。コードが繰り返されていることがわかっているので、誰かがこのループを 1 つ作成するのを手伝ってくれることを願っています。

どうもありがとう!

    switch($max) {

    case 80 :
        $returnNO = 5;
        for($a = 1; $a<=5; $a++) {
            if($matchno == $a || $matchno == ($a+1)){
                $matchinfo['matchno'] = $returnNO;
                $matchinfo['place'] = ($matchno == $a ? 'clan1' : 'clan2');
                return $matchinfo;
            }
            $returnNO++;
            $a++;
        }
        if($matchno == 7){
            $matchinfo['winner'] = true;
            return $matchinfo;
        }elseif($matchno == 8){
            $matchinfo['third_winner'] = true;
            return $matchinfo;
        }
    break;

    case 160 :
        $returnNO = 9;
        for($a = 1; $a<=13; $a++) {
            if($matchno == $a || $matchno == ($a+1)){
                $matchinfo['matchno'] = $returnNO;
                $matchinfo['place'] = ($matchno == $a ? 'clan1' : 'clan2');
                return $matchinfo;
            }
            $returnNO++;
            $a++;
        }
        if($matchno == 15){
            $matchinfo['winner'] = true;
            return $matchinfo;
        }elseif($matchno == 16){ 
            $matchinfo['third_winner'] = true;
            return $matchinfo;
        }
    break;

    case 320 :
        $returnNO = 17;
        for($a = 1; $a<=29; $a++) {
            if($matchno == $a || $matchno == ($a+1)){
                $matchinfo['matchno'] = $returnNO;
                $matchinfo['place'] = ($matchno == $a ? 'clan1' : 'clan2');
                return $matchinfo;
            }
            $returnNO++;
            $a++;
        }

        if($matchno == 31){
            $matchinfo['winner'] = true;
            return $matchinfo;
        } elseif($matchno == 32){
            $matchinfo['third_winner'] = true;
            return $matchinfo;
        }
    break;
    case 640 :              
        $returnNO = 33;
        for($a = 1; $a<=61; $a++) {
            if($matchno == $a || $matchno == ($a+1)){
                $matchinfo['matchno'] = $returnNO;
                $matchinfo['place'] = ($matchno == $a ? 'clan1' : 'clan2');
                return $matchinfo;
            }
            $returnNO++;
            $a++;
        }   
        if($matchno == 63){
            $matchinfo['winner'] = true;
            return $matchinfo;
        }elseif($matchno == 64){
            $matchinfo['third_winner'] = true;
            return $matchinfo;
        }               
    break;      

    }
}
4

2 に答える 2

1

最初の 2 つのケースを例として使用します。

switch ($max) {
case 80:
        $returnNO = 5;
        $loopCount = 5;
        $winner = 7;
        $thirdWinner = 8;
        break;

    case 160:
        $returnNO = 9;
        $loopCount = 13;
        $winner = 15;
        $thirdWinner = 16;
        break;
    ...
}

for ($a = 1; $a <= $loopCount; $a++) {
    if ($matchno == $a || $matchno == ($a + 1)) {
        $matchinfo['matchno'] = $returnNO;
        $matchinfo['place'] = ($matchno == $a ? 'clan1' : 'clan2');
        return $matchinfo;
    }
}

if ($matchno == $winner) {
    $matchinfo['winner'] = true;
    return $matchinfo;
} else if ($matchno == $thirdWinner) {
    $matchinfo['third_winner'] = true;
    return $matchinfo;
}

簡単に説明すると、常に繰り返されるコードを削除し、それをパラメーター化してみてください (関数を作成するか、繰り返されるすべてのコードを別の場所に配置することにより...この例では、switch ステートメントの後に繰り返しコードを配置し、パラメーター化します。

于 2013-08-20T20:14:30.310 に答える
0

私がよく理解していれば、スイッチケースを使用せずに、指定したすべてのケースで機能すると思われる代替ソリューションを次に示します。

$div10 = $max / 10;
$maxLoop = $div10 - 3;
$returnNO = $div10 / 2 + 1;

for($a = 1; $a<=$maxLoop; $a++) {
    if($matchno == $a || $matchno == ($a+1)){
        $matchinfo['matchno'] = $returnNO;
        $matchinfo['place'] = ($matchno == $a ? 'clan1' : 'clan2');
        return $matchinfo;
    }
    $returnNO++;
    $a++;
}
if($matchno == ($div10-1)){
    $matchinfo['winner'] = true;
    return $matchinfo;
}elseif($matchno == $div10){
    $matchinfo['third_winner'] = true;
    return $matchinfo;
}
于 2013-08-20T20:16:29.407 に答える