【问题标题】:How to repeat for loop inside for loop with switch PHP如何使用开关 PHP 在 for 循环中重复 for 循环
【发布时间】:2026-02-05 14:00:05
【问题描述】:

如果达到一定数量,我会尝试重复 $i。例如$i <= 4,然后再次启动$i,得到如下结果。

代码:

$let_a_p = '';

for ($i = 1; $i <= 10; $i++) {
  switch (true) {
    case $i <= 1:
      $let_a_p = 'a'.$i;
      break;
    case $i <= 4:
      $i = 1;
      $let_a_p = 'b'.$i;
      break;
    case $i <= 8:
      $i = 1;
      $let_a_p = 'c'.$i;
      break;
  }
  echo $let_a_p;
}

结果应该是:

a1
a2
a3
c1
c2
c3
c4
d1
d2
d3

(共10个)

【问题讨论】:

    标签: php string for-loop switch-statement


    【解决方案1】:

    问题是你一直在重置$i,它正在控制循环。相反,您可以调整显示的数字。我也稍微调整了开关条件以简化它...

    for ($i = 1; $i <= 10; $i++) {
        switch (true) {
            case $i < 4:
                $let_a_p = 'a'.$i;
                break;
            case $i < 8:
    //             $i = 1;
                $let_a_p = 'b'.($i-3);
                break;
    //         case $i <= 8:
    //             $i = 1;
            default:
                $let_a_p = 'c'.($i-7);
                break;
        }
        echo $let_a_p;
    }
    

    【讨论】:

      【解决方案2】:

      另一种更不容易出错的方法是嵌套循环:

      // model
      $prefixes  = ['a','b','c'];
      $limits    = [ 3 , 4 , 3 ];
      
      
      // controller
      $results = [];    // we want an array even if loop does not start at all
      $c       = min(count($limits) , count($prefixes));
      
      for ($i = 0; $i < $c; $i++)
        for ($j = 1; $j <= $limits[$i]; $j++)
          $results[] = $prefixes[$i] . $j;
      
      
      // view
      echo '<div>' .implode("</div>\n<div>", $results) . '</div>';
      

      这是更通用的并且遵循 MVC 概念。

      【讨论】:

      • 好主意。谢谢。