PHP Switch - 只查看一个案例?

And*_*son 2 php joomla case switch-statement

目前我有一个有两个选择选项的表单,一个可以查看案例0,另一个可以查看案例4.

我有一个标签,所以我不能使用表单,因为当我选择一个选项时网站刷新.然后它显示两个选项卡中的选项.

我试过只有一个选项.但那不行.

这是选项卡/表单代码:

<div class="tab1">
<form action="<?php  echo JRoute::_('index.php'); ?>" method="post">
<input type="hidden" name="option" value="com_yoflash" />
<input type="hidden" name="view" value="category" />
<input type="hidden" name="mochicat" value="<?php echo $this->cat->catid; ?>" />
<select name="order" size="1" onchange="submit();">
  <option value="0" <?php if($this->order=="0") echo "selected=\"selected\""; ?>><?php echo JText::_('ORDER_DATE_NEWEST'); ?></option>
  <option value="4" <?php if($this->order=="4") echo "selected=\"selected\""; ?>><?php echo JText::_('ORDER_POPULAR'); ?></option>
</select>
<input type="hidden" name="Itemid" value="<?php echo $this->Itemid; ?>" />
</form>
</div>
Run Code Online (Sandbox Code Playgroud)

我得到了另一个完全相同的div选项卡.在第一个div选项卡中,我想查看案例0或订单0.

在第二个div选项卡中,我想查看case4或order 4.但我不希望任何形式只是查看该订单.而不是通过表格选择.

这是切换代码:

$limitstart=JRequest::getInt('limitstart',0);
    if($order==-1) {
      $tmp=$session->get('order');
      if(empty($tmp)) {
        $order=0;
      }
      else {
        $order=$session->get('order');
      }
    }
    $session->set('order',$order);


    $order=$session->get('order');
    $Itemid=JRequest::getInt('Itemid',NULL);

    switch($order){
      case 0:
        $str="ORDER BY date_added DESC";
        break;
      case 1:
        $str="ORDER BY date_added ASC";
        break;
      case 2:
        $str="ORDER BY name ASC";
        break;
      case 3:
        $str="ORDER BY name DESC";
        break;
      case 4:
        $str="ORDER BY stat_clicked DESC";
        break;
      default:
        $str="ORDER BY date_added ASC";
        break;
    }
Run Code Online (Sandbox Code Playgroud)

Chr*_*mas 5

ewww,开关有点难看,这里有一个更好的版本:

$sortMap = array(
"ORDER BY date_added DESC",
"ORDER BY date_added ASC",
"ORDER BY name ASC",
"ORDER BY name DESC",
"ORDER BY stat_clicked DESC"
);

$str = isset($sortMap[$order]) 
    ? $sortMap[$order]
    : "ORDER BY date_added ASC";
Run Code Online (Sandbox Code Playgroud)

由于$ order介于0..4之间,你可能会利用它将映射到数组索引并避免丑陋的切换这一事实,并在此过程中为自己节省一堆浪费,混乱的行.

注意:如果$ type不符合正常的数值数组索引,你也可以使用关联数组执行此操作,您只需手动指定每个元素中的数组索引,如"cat"=>"ORDER BY ..."您的排序映射数组,它应该相同的工作.