【问题标题】:Complex for loop with if else带有 if else 的复杂 for 循环
【发布时间】:2015-04-17 20:47:12
【问题描述】:

我被困在这里。我有这个带有 if else 条件的循环,并且我需要在一次迭代中输出 else 以根据前一次迭代的输出进行更改。示例如下:

$mr1 = 2;
$mc1 = 4;
$mr2 = 2;
$mc2 = 3;
$r = 5; $c = 5;
echo "<table>";
for ($i=1; $i <= $r; $i++) { 
    echo "<tr>";
    for ($n=1; $n <= $c; $n++) { 
        if ((($i == $mr1) AND ($n == $mc1)) || (($i == $mr2) AND ($n == $mc2))){
            echo "<td> * </td>";
        } else 
            echo "<td> 1 </td>";
    }
    echo "</tr><br>";
}
echo "</table><br><hr/><br>";

因此,在此循环中,如果满足条件,则输出将是 *,否则将是数字 1。我不知道如何实现是使代码输出2,如果在以前的迭代输出是*。 我希望你明白我想说什么? 谢谢

【问题讨论】:

  • 你能添加一个变量来保存“以前的”输出并使用它吗?
  • 您可以将 1 设为变量,并在您回显 *if 中将变量增加到 2

标签: php if-statement for-loop


【解决方案1】:

使用另一个变量:

$last_star = false;
for ($n=1; $n <= $c; $n++) { 
    if ((($i == $mr1) AND ($n == $mc1)) || (($i == $mr2) AND ($n == $mc2))){
        echo "<td> * </td>";
        $last_star = true;
    } elseif ($last_star) {
        echo "<td> 2 </td>";
        $last_star = false;
    } else { 
        echo "<td> 1 </td>";
        $last_star = false;
    }
}

顺便说一句,改掉写ifelse 子句而不用大括号括起来的习惯。如果您在有多个语句时忘记添加所需的大括号,则在向它们添加代码时(如我上面所做的那样)可能会导致问题。

Why is it considered a bad practice to omit curly braces?

【讨论】:

    【解决方案2】:

    我只是想在@Barmar 的回答中补充一点,这是许多语言中的常见模式,并且可以通过循环范围之外的变量轻松解决:

    var outsideVariable = false;  //variable here is public and would work sometimes.
    function()
    {
    // Variable could also be here to be outside only the for loop
      for ($n = 0; n < x; n++)
      {
         if (condition a) 
         {
         //Do stuff
         outsideVariable = false;
         }
         elseif (condition a & outsideVariable)
         {
         //do other stuff
         outsideVariable = false;     
         }
         else
         {
         //do other stuff
         outsideVariable = true;     
         }
      }
    }
    

    我知道这不是针对您的问题,但指出范围希望能帮助您和其他人了解 Barmar 所展示的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2021-09-16
      相关资源
      最近更新 更多