0

したがって、$round == P,1,2 および A に対して何度も繰り返す必要があると思われるコードがあります。冗長なコードを作成せずにこれを達成できるものはありますか?

利用可能な 3 つの可能な $round 変数すべてを単純に交換し、関連情報をエコーする関数を作成することを考えています。これを達成する方法について何か考えはありますか?

他の情報は同じままです。変更されるのは $round だけです。

// determine previous round

      if($round == "P") echo "";

            // if we are in round 1, look up round P bookings

            if($round == "1")
            { 
      $sql = "SELECT 
                            *
                            FROM ts_request
                            INNER JOIN ts_day
                            ON ts_request.day_id = ts_day.id
                            INNER JOIN ts_period
                            ON ts_request.period_id = ts_period.id
                            INNER JOIN ts_allocation
                            ON ts_request.id = ts_allocation.request_id
                            WHERE ts_request.round=:round
                            AND ts_request.dept_id=:dept
                            ORDER BY ts_request.module_id ASC";

            $stm = $pdo->prepare( $sql );
            $stm->execute( array( ':round' => 'P', ':dept' => $loggedin_id  ) );
            $rows = $stm->fetchAll();   

      foreach ($rows as $row) 
            {               
            echo '<tr align="center">'; 
            echo '<td>'.$row['module_id'].'</td>';
            echo '<td>'.$row['day'].'</td>';    
            echo '<td>'.$row['period'].'</td>';
            echo '<td>';

                $sql = "SELECT * FROM ts_roompref
                                WHERE request_id=:id";
                $stm = $pdo->prepare( $sql );
                $stm->execute( array( ':id' => $row['request_id']) );
                $rows2 = $stm->fetchAll();                  

                foreach ($rows2 as $row2) 
                {               
                        if ($row2['room_id']=="0")
                        {
                            echo "Any<br>";
                        }
                            else
                        {
                            echo $row2['room_id'].'<br>';
                        }   
                }

            echo '</td>';           
            echo '<td>'.$row['status'].'</td>';
            echo '</tr>';
            }
            }

            // if we are in round 2, look up round 1 bookings

            if($round == "2")
            { 
      $sql .= "";
            }   
      foreach ($rows as $row) 
            {
            // echo results here
            };

            // if we are in round A, look up round 2 bookings

            if($round == "A")
            { 
      $sql .= "";
            }           
      foreach ($rows as $row) 
            {

            // echo results here

            };  
4

3 に答える 3

1

これは役立つかもしれません。

$roundsInOrder = array('P', '1', '2', 'A');
$roundKey = array_search($incomingRoundLetter, $roundsInOrder);
if ($roundKey !== false || $roundKey != 0) { 
    $roundToQuery = $roundsInOrder[$roundKey - 1];
    // your other code snipped
    $stm->execute( array( ':round' => $roundToQuery, ':dept' => $loggedin_id  ) );
    //more code here
}

このコードの機能:

ラウンドを順番に設定します。次に、次のラウンドのラウンドを検索します。私たちは本当に鍵が欲しいのです。次に、ifステートメントは、a)ラウンドが実際に見つかったことを確認し、b)クエリを実行したくないため、ラウンドが最初のラウンドではないことを確認します(0 = P)。最後に、$ roundToQueryは、現在のキーの直前にあるラウンドから値を取得します。

于 2013-02-19T02:48:47.783 に答える
1

あなたが探しているのはphpのswitch()関数だと思います。

これを使用する方法についての素晴らしく簡単なチュートリアルがあります: http://www.tizag.com/phpT/switch.php

お役に立てれば。

于 2013-02-18T23:40:27.210 に答える
1

「スワッピング」はすでに存在し、「switch ステートメント」と呼ばれます。あなたの場合、次のようになります。

switch($round) {
    case "P": 
        //code
    break;


    case "1": 
        //code
    break;


    case "2": 
        //code
    break;


    case "A": 
        //code
    break;


    default: 
        //code, when value of $round doesn't match any case
    break;

}
于 2013-02-18T23:41:43.397 に答える