【问题标题】:Why my while loop iteration is 15 times instead of 10?为什么我的 while 循环迭代是 15 次而不是 10 次?
【发布时间】:2021-07-15 07:42:03
【问题描述】:
<?php
$i = 0;
$j = array('U1','U2','U3','U4','U5');
while ($i <= 10) {
    foreach ($j as $value) {
        $i++;
        echo "$i $value <br>";
    }
}

?>

// 输出 1个U1 2 U2 3 U3 4 U4 5 U5 6 U1 7 U2 8 U3 9 U4 10 U5 11 U1 12 U2 13 U3 14 U4 15 U5

我希望我的循环迭代是 10 次

【问题讨论】:

  • 你有两个循环:while 和 for each。因此,您运行了 10 次 foreach 循环的 5 项数组,但每次循环都会增加计数器 $i,最终结果为 15。您想在屏幕上打印什么?整个数组的 10 倍?
  • foreach 第二次完成$i 将是10,这使得$i &lt;= 10 为真,所以它第三次运行,使其变为15,结束while 循环跨度>
  • 因为你在循环中添加了 $i++ ,首先是 echo 语句。所以第二次为每个完成 $i 的值为 9。将 while 语句更改为 9 它将起作用

标签: php foreach while-loop


【解决方案1】:

你应该开始初始化 $i = 1 而不是 $i = 0 您可以通过更改循环中的值来检查自己。 例如,在你的代码中你放 i

你在增加 i 值后也打印了值。

这就是上述问题的解决方案。

<?php
$i = 1;
$j = array('U1','U2','U3','U4','U5');
while ($i <= 10) {
    foreach ($j as $value) {
        echo "$i $value <br>";
        $i++;
    }
}
?>

输出

1 U1
2 U2
3 U3
4 U4
5 U5
6 U1
7 U2
8 U3
9 U4
10 U5

【讨论】:

    【解决方案2】:

    请按照您的预期运行以下代码。

    <?php
    $i = 0;
    $j = array('U1','U2','U3','U4','U5');
    foreach ($j as $value) {
        while ($i < 10) {
            $i++;
            echo "$i $value <br>";
        }
    }
    ?>
    

    【讨论】:

    • 不是 OP 的期望。这将打印U1 十次
    【解决方案3】:

    您的循环运行了 15 次,因为它是 2 个循环。它实际上不是运行 15 次,而是运行 3 次。那是因为每次你让它运行时,它都会打印整个数组。所以,对于每个数组项,$i 增加 5。让我解释一下:

    1. 您将$i 设置为0
    2. 您设置了一个包含 5 个项目的数组
    3. $i 小于或等于 10 时,您:
      1. 对于数组的每个项目(在您的情况下为 5 次),请执行以下操作:
        1. $i 增加 1
        2. 打印$i 和您正在读取的数组项的键。

    所以每次运行 foreach 循环时,$i 都会增加 5。 要解决这个问题: 不要使用 for() 循环。只需这样做:

    <?php
    $i = 1;
    $j = array('U1','U2','U3','U4','U5');
    while ($i <= 10) {
        foreach ($j as $value) {
            echo "$i $value <br>";
            $i++;
        }
    }?>
    

    那么发生了什么变化? $i 从 1 开始,打印后增加。输出:

    1 U1
    2 U2
    3 U3
    4 U4
    5 U5
    6 U1
    7 U2
    8 U3
    9 U4
    10 U5
    

    --已解决--

    另一种解决方案是从 0 开始 $i 并在打印之前增加它。代码:

    <?php
    $i = 0;
    $j = array('U1','U2','U3','U4','U5');
    while ($i < 10) {
        foreach ($j as $value) {
            $i++;
            echo "$i $value <br>";
        }
    }?>
    

    输出:

    1 U1
    2 U2
    3 U3
    4 U4
    5 U5
    6 U1
    7 U2
    8 U3
    9 U4
    10 U5
    

    【讨论】:

    • "在打印之前增加它" 这似乎是错误的解释。它之所以有效是因为$i &lt; 10
    • 不...这不是一个错误的解释。原始的首先打印它然后增加它。在这里,它首先增加它然后打印它。如果您尝试过,或者只是想一想,打印的原件首先将第一个数字打印为 0 U1。我将其打印为 1 U1。
    【解决方案4】:

    因为您在 while 循环中使用了 foreach 循环。就在第三个循环之前,$i 实际上小于或等于 10。但随后您对数组运行 foreach 循环。我建议只使用基本的 for 循环。它还会使代码看起来更干净。

    for ($i = 0; $i < count($j)*2; $i++) 
     { //execute code 
     }
    

    这将确保数组的迭代恰好运行 10 次。此解决方案仅在数组大小恒定且不改变时才有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2014-11-25
      • 2021-09-07
      • 1970-01-01
      • 2015-03-23
      相关资源
      最近更新 更多