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