带有多个表达式的php switch语句

时间:2016-02-15 19:09:15

标签: php switch-statement

我有6个html选择框。每个选择框包含三个值(最近媒体,流行媒体,评论媒体),我有变量$item->content1$item->content6每个变量返回到选择框。我在下面用switch语句创建了这段代码,因为我想一次使用switch语句而不是6次使用它。

代码工作但每次都返回到最近媒体而不返回流行和评论媒体。我如何正确解决这个问题,直到我的代码正确并返回所有情况?

function YPE_bsn_show_diffcontent(&$item_output, $item) {
        switch (true) {
            case ($item->content1 == 'recent-media' OR $item->content2 == 'recent-media' OR $item->content3 == 'recent-media' OR $item->content4 == 'recent-media' OR $item->content5 == 'recent-media' OR $item->content6 == 'recent-media'):
                YPE_Bsn_Content::YPE_bsrecent_media($item_output, $item);
                break;
            case ($item->content1 == 'popular-media' OR $item->content2 == 'popular-media' OR $item->content3 == 'popular-media' OR $item->content4 == 'popular-media' OR $item->content5 == 'popular-media' OR $item->content6 == 'popular-media'):
                YPE_Bsn_Content::YPE_bspopular_media($item_output, $item);
                break;
            case ($item->content1 == 'comment-media' OR $item->content2 == 'comment-media' OR $item->content3 == 'comment-media' OR $item->content4 == 'comment-media' OR $item->content5 == 'comment-media' OR $item->content6 == 'comment-media'):
                YPE_Bsn_Content::YPE_bscomments_media($item_output, $item);
                break;
            default:
                $item_output .= 'You don\'t selected content for first column';
                break;
        }
}

1 个答案:

答案 0 :(得分:1)

您没有切换变量而是常量,那么结果始终是相同的

     switch (true) {

         case 
             .....
    }

切换正确的相关var

     switch ($item->content1 ) {
           case 'recent-media': 
                your code fo recent media 
                break;
           ....
           case 'popular-media': 
                your code fo popular media  
                break;
           case 'comment-media': 
                your code fo comment  media 
                break;
    }

基本上你以错误的方式使用swithc看看php doc是否正确使用

在你的情况下你需要if(而不是切换)

  function YPE_bsn_show_diffcontent(&$item_output, $item) {
        if  ($item->content1 == 'recent-media' OR 
              $item->content2 == 'recent-media' OR 
              $item->content3 == 'recent-media' OR 
              $item->content4 == 'recent-media' OR 
              $item->content5 == 'recent-media' OR 
              $item->content6 == 'recent-media')  {
                YPE_Bsn_Content::YPE_bsrecent_media($item_output, $item);
                return;
        }
        if  ($item->content1 == 'popular-media' OR 
              $item->content2 == 'popular-media' OR 
              $item->content3 == 'popular-media' OR 
              $item->content4 == 'popular-media' OR 
              $item->content5 == 'popular-media' OR 
              $item->content6 == 'popular-media') {
                YPE_Bsn_Content::YPE_bspopular_media($item_output, $item);
                return;
        }
        if  ($item->content1 == 'comment-media' OR 
              $item->content2 == 'comment-media' OR 
              $item->content3 == 'comment-media' OR 
              $item->content4 == 'comment-media' OR 
              $item->content5 == 'comment-media' OR 
              $item->content6 == 'comment-media') {
                YPE_Bsn_Content::YPE_bscomment_media($item_output, $item);
                return;
        }

       $item_output .= 'You don\'t selected content for first column';
       return ;
    }