在php中,如何将switch case语句放入foreach循环中?

在php中,如何将switch case语句放入foreach循环中?,php,codeigniter,foreach,switch-statement,Php,Codeigniter,Foreach,Switch Statement,我在foreach循环中有以下条件语句。我想检查所有的条件语句。我希望它能够通过使用switch-case语句来完成。有人能告诉我怎么做吗?还是有其他方法可以做到这一点?某些日期的值与所有四种情况有关。他们不会检查我是否使用这个代码。因为我是新手,所以我很难想出怎么做。如果有人能提出一个想法,那将是一个很大的帮助 foreach ($query->result() as $row) { if ($row->title == 'GK' && $

我在foreach循环中有以下条件语句。我想检查所有的条件语句。我希望它能够通过使用switch-case语句来完成。有人能告诉我怎么做吗?还是有其他方法可以做到这一点?某些日期的值与所有四种情况有关。他们不会检查我是否使用这个代码。因为我是新手,所以我很难想出怎么做。如果有人能提出一个想法,那将是一个很大的帮助

foreach ($query->result() as $row) {

            if ($row->title == 'GK' && $row->type == 'AM') {
                $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
            }  if ($row->title == 'GK' && $row->type == 'PM') {
                $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
            } if ($row->title == 'RP' && $row->type == 'AM') {
                $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
            } if ($row->title == 'RP' && $row->type == 'PM') {
                $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
            }     


        } 

使用else if条件,而不是仅当条件:

     foreach ($query->result() as $row) {
        if ($row->title == 'GK' && $row->type == 'AM') {
            $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
        } elseif ($row->title == 'GK' && $row->type == 'PM') {
            $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
        } elseif ($row->title == 'RP' && $row->type == 'AM') {
            $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
        } elseif ($row->title == 'RP' && $row->type == 'PM') {
            $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
        }     
    } 
上述代码与给定的条件代码相同。看看吧


建议您使用switch语句而不是条件语句,因为我们知道可能的值是什么。

如果您想对switch case执行相同的操作,那么这是一种方法

switch($row->title()){

  case 'GK':

    switch($row->type()){

      case 'AM':
      ......
      break;

    }

     break;


......
}
}


试试这个

看起来它实际上比需要的复杂得多

$all_cals = [
  'GK' => [
      'AM' => &$cal_data,
      'PM' => &cal_data2
  ],
  'RP' => [
      'AM' => &$cal_data3,
      'PM' => &cal_data4
  ]
];

foreach ($query->result() as $row) {
   $row_cal_data = $all_cals[$row->title][$row->type];
   if (isset($row_cal_data)) {
      $row_cal_data[substr($row->date_cal, 8, 2)] = '<div class="'.tolower($row->title)."_".tolower($row->type).'">' . $row->title . ' ' . $row->type . '</div>';
   }
}

根本没有开关语句。

我认为与您的场景非常接近

foreach ($query->result() as $row) {

switch (true) {
                    case ($row->title == 'GK' && $row->type == 'AM'):
                     $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
                        break;
                    case ($row->title == 'GK' && $row->type == 'PM'):
                    $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
                        break;
                    case ($row->title == 'RP' && $row->type == 'AM'):
                    $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
                        break;                      
                    case ($row->title == 'RP' && $row->type == 'PM'):
                    $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
                        break;
                }    
}
放弃整个开关等,使用数组。通过使用strtolower作为类名,您可能可以在一行中完成所有工作。变量递增$CALU data1、$CALU data2..等。取而代之的是数组中的新值,例如$cal_数据['date_cal'][0]、$cal_数据['date_cal'][1]……等等。这可能会使您的代码更易于使用:

<?php
foreach ($query->result() as $row) {
        // I am not sure if you wish to capture each instance,
        // but you have no if/elseif so I assume you are capturing
        // each instance.
        $cal_data[substr($row->date_cal, 8, 2)][]   =   '<div class="'.strtolower($row->title.'_'.$row->type).'">'.$row->title.' '.$row->type.'</div>';     
    } 
?>

每个变量$row->title和$row->type的所有可能值是什么?@Gunaseelan title是'RP'或'GK',类型是'AM'或'PM',那么Rasclatt的答案和我的答案就足以满足您的要求。这里,'GK_AM'、'GK_PM'、'RP_AM'和'RP_PM'是css类。“我只是在那个div中调用它,以便获得一些样式。”Stell理解。我的示例代码应该产生与您的代码完全相同的结果,当然我还没有测试它。可能有更好的方法来构造HTML,但我必须更多地了解您的实际用例。
foreach ($query->result() as $row) {

switch (true) {
                    case ($row->title == 'GK' && $row->type == 'AM'):
                     $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
                        break;
                    case ($row->title == 'GK' && $row->type == 'PM'):
                    $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
                        break;
                    case ($row->title == 'RP' && $row->type == 'AM'):
                    $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
                        break;                      
                    case ($row->title == 'RP' && $row->type == 'PM'):
                    $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
                        break;
                }    
}
<?php
foreach ($query->result() as $row) {
        // I am not sure if you wish to capture each instance,
        // but you have no if/elseif so I assume you are capturing
        // each instance.
        $cal_data[substr($row->date_cal, 8, 2)][]   =   '<div class="'.strtolower($row->title.'_'.$row->type).'">'.$row->title.' '.$row->type.'</div>';     
    } 
?>