繁体   English   中英

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

[英]How to put switch case statement inside a foreach loop in php?

我在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条件,而不是仅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>';
        }     
    } 
foreach ($query->result() as $row) 
{
    switch($row->title)
    {
        case 'GK':
            switch($row->type)
            {
                case 'AM':
                    $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
                    break;
                case 'PM':
                    $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
                    break;
            }
        break;
        case 'RP':
            switch($row->type)
            {
                case 'AM':
                    $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
                    break;
                case 'PM':
                    $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
                    break;
            }
        break;

    }
}

上面的代码与给定的条件代码相同。 看看这个。

建议您对conditional语句使用switch语句,因为我们知道可能出现的值是什么。

如果您想对switch-case做同样的事情,那么这是一种方法。

switch($row->title()){

  case 'GK':

    switch($row->type()){

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

    }

     break;


......
}
foreach ($query->result() as $row) {
switch($row->title) {
    case 'GK': if($row->type=='AM'){
         $cal_data[substr($row->date_cal, 8, 2)] = '<div class="gk_am">' . $row->title . ' ' . $row->type . '</div>';
                }else{
                     $cal_data2[substr($row->date_cal, 8, 2)] = '<div class="gk_pm">' . $row->title . ' ' . $row->type . '</div>';
                }
                break ;
    case 'RP':  if($row->type=='AM'){
                    $cal_data3[substr($row->date_cal, 8, 2)] = '<div class="rp_am">' . $row->title . ' ' . $row->type . '</div>';
                }else{
                     $cal_data4[substr($row->date_cal, 8, 2)] = '<div class="rp_pm">' . $row->title . ' ' . $row->type . '</div>';
                }
                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>';
   }
}

根本没有switch语句。

我认为接近您的情况

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;
                }    
}

放弃整个switch等使用array 您也可以通过将strtolower()作为类名来完成所有操作。 您的变量递增值( $cal_data1$cal_data2 。)只是数组中的新值,因此$cal_data['date_cal'][0]$cal_data['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>';     
    } 
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM