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

我认为您正在寻找的是 php 中的 switch() 函数。

这是一个关于如何使用它的漂亮而简单的教程: http ://www.tizag.com/phpT/switch.php

希望这可以帮助。

于 2013-02-18T23:40:27.210 回答
1

“交换”已经存在,它被称为“切换语句”。在您的情况下,它应该如下所示:

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 回答
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 回答