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

php switch statement with multiple expressions

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

代码有效,但每次 return 到最近的媒体而不是 return 到流行和评论媒体。我该如何解决这个问题,直到我的代码正确并且 return 对于所有情况?

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

你不是在切换一个变量而是一个常量然后结果总是一样的

     switch (true) {

         case 
             .....
    }

切换正确的相关变量

     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 文档以正确使用

在你的情况下你需要 if (and not switch)

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