【问题标题】:PHP - Using a for loop instead of a switch statementPHP - 使用 for 循环而不是 switch 语句
【发布时间】:2013-11-17 18:58:11
【问题描述】:

Overflow 社区有史以来第一次发帖!

目前我正在做一个项目,并开始使用 PHP 来动态插入页面。

此时我有...

switch ($route) {
  case 'step1':
        include('./views/enrolment/mainstream/_step1.php');
        include('./views/partials/_footer.php') ;
        break;
    case 'step2':
        include('./views/enrolment/mainstream/_step2.php');
        include('./views/partials/_footer.php') ;
        break;
    case 'step3':
        include('./views/enrolment/mainstream/_step3.php');
        include('./views/partials/_footer.php');
        break;
    case 'step4':
        include('./views/enrolment/mainstream/_step4.php');
        include('./views/partials/_footer.php');
        break;
    case 'step5':
        include('./views/enrolment/mainstream/_step5.php');
        include('./views/partials/_footer.php');
        break;
    case 'step6':
        include('./views/enrolment/mainstream/_step6.php');
        include('./views/partials/_footer.php');
        break;
    case 'step7':
        include('./views/enrolment/mainstream/_step7.php');
        include('./views/partials/_footer.php');
        break;


这意味着似乎很长,并且通过 for 循环更好地实现,但是我是 PHP 的新手,完全不确定我将如何实现这个想法。

也欢迎任何其他不使用 for 循环的建议!

谢谢大家!

【问题讨论】:

  • 每一步之间的唯一区别是“stepX”中的数字吗?那么……你听说过变量吗?

标签: php loops dynamic for-loop switch-statement


【解决方案1】:

您可以使用 php 的 file_exists() fn 检查该文件是否存在

if(file_exists('./views/enrolment/mainstream/_'.$routes.'.php')) {
    include('./views/enrolment/mainstream/_'.$routes.'.php');
    include('./views/partials/_footer.php') ;
}

处理 else 部分以满足您的需要。

【讨论】:

  • 绝对精彩的回答人们,而且速度如此之快!你所有的答案都一样有效!但是我不得不选择一个,提前谢谢大家的帮助!
【解决方案2】:

最好检查$route的值

if (in_array($route, range(1, 7))){
    include('./views/enrolment/mainstream/_'.$route.'.php');
    include('./views/partials/_footer.php') ;
} else {
    //...error code
}

【讨论】:

    【解决方案3】:
    for($i = 0; $i < 7; $i++){
        if($route == "step" . $i){
            include('./views/enrolment/mainstream/_step' .$i . '.php');
            include('./views/partials/_footer.php');
            break;
        }
    }
    

    【讨论】:

    • 我觉得问题的标题不太对,他不需要for来做他想做的事,所以不需要这段代码,因为你会检查7次if($route === 'step' . $i) {
    【解决方案4】:

    就像@praveen 说的那样使用:

    include('./views/enrolment/mainstream/_'.$routes.'.php');
    

    但是你在复制:

    include('./views/partials/_footer.php');
    

    对于每个查询,为什么不在页面中将其作为静态查询?

    【讨论】:

      【解决方案5】:

      为什么不使用$route作为变量来加载文件?

      include("./views/enrolment/mainstream/_{$route}.php");
      include('./views/partials/_footer.php') ;
      

      【讨论】:

        【解决方案6】:

        怎么样

        $i = 1;
        $steps = 7;
        
        for($i = 1; $i <= $steps; $i++) {
          if($route === 'step' . $i) {
             include('./views/enrolment/mainstream/_step' . $i . '.php');
             include('./views/partials/_footer.php');
             break;
          }
        }
        

        【讨论】:

        • 我觉得问题的标题不太对,他不需要for来做他想做的事,所以不需要这段代码,因为你会检查7次if($route === 'step' . $i) {
        【解决方案7】:

        大大减少你的代码:

        include('./views/enrolment/mainstream/_step' . $route . '.php');
        include('./views/partials/_footer.php');
        

        【讨论】:

          【解决方案8】:

          也许这个简单的解决方案对你有好处:

          include('./views/enrolment/mainstream/_'.$route.'.php');
          include('./views/partials/_footer.php');
          

          【讨论】:

          • 复制粘贴答案?哈哈
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多