【问题标题】:Nested loop logic嵌套循环逻辑
【发布时间】:2016-03-15 08:11:02
【问题描述】:

我有这个代码块

<?php

$myArray = array('a', 'b', 'c');

foreach ($myArray as $k => $v) {
    echo $v;

    for ($i = 1; $i < 5; $i++) {
        if ($i == $k) {
            break;
        }

        echo $i; //a1234bc1 
    }
}


?>

在我达到 c 之后的值之前,我对此没有任何问题。不应该是 1234 而不是 1 ?我错过了什么吗?

【问题讨论】:

  • 想要这个? a1234b1234c1234
  • 你的预期输出是什么?
  • @FatalError 因为您的 $i 和 $k 值在那个阶段等于 2(两者都相等)。
  • 是的,它在 forloop 内部,它首先将 $i 打印为 1 。然后 $i 增加到 2。

标签: php nested-loops


【解决方案1】:

因为,

  1. 在foreach的第一次迭代中$k的值为0,for循环中没有0,它覆盖了所有并打印了所有1到4,所以输出是a1234

  2. 在 foreach 的第二次迭代中,$k 的值是 1,for 循环从 1 开始,所以在 if 条件下它是第一次迭代,所以循环在 for 循环的第一次迭代中停止,并且只打印 b ,所以输出是 a1234b

  3. 类似地,在第三次迭代中,foreach 的值$k2,for 循环从1 开始,所以在 if 条件下它是在第二次迭代中,所以在 for 循环的第二次迭代中循环停止print c1 ,所以输出是a1234bc1

我想你现在很清楚了。

【讨论】:

    【解决方案2】:

    foreach ($myArray as $k =&gt; $v) 循环执行 3 次,因为 $myArray 有 3 个元素。

    首次运行

    $k = 0 这是第一个元素的索引,$v = "a"

    echo $v; // Outputs a
    

    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    

    输出从 1 到 5 的所有数字,并在满足 $k 的确切值时停止。 $k 为 0,因此条件(中断)永远不会被触发。因此从 1 到 5 的所有数字都会被回显。

    目前的输出:

    a1234

    第二次运行

    $k = 1 这是第二个元素的索引,$v = "b"

    for ($i = 1; $i < 5; $i++) { ... }
    

    循环的输出

    for ($i = 1; $i < 5; $i++)
    

    输出从 1 到 5 的所有数字,并在满足 $k 的确切值时停止。由于$k 为 1,break 在 llop 的第一次运行时被执行,因此没有输出。

    目前的输出:

    a1234b

    第三次运行

    $k = 2 这是第三个元素的索引,$v = "c"

    echo $v; // Outputs c
    

    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    

    输出从 1 到 5 的所有数字,并在满足 $k 的确切值时停止。作为$k euqals 2,这次循环在输出 1 后执行。在第二次运行时,break 执行并终止输出

    最终输出:

    a1234bc1

    【讨论】:

    • 第一次迭代的输出将是 a1234 而不是 a12345
    【解决方案3】:

    第一次迭代:
    第一个循环
    $k = 0; $v = a;
    第二个循环
    $i 不等于 $k;
    输出:a1234

    第二次迭代:
    第一个循环
    $k = 1; $v = b;
    第二个循环
    $i 等于 $k(即 1);
    输出:a1234b

    第三次迭代:
    第一个循环
    $k = 2; $v = c;
    第二个循环
    $i 等于 $k(即 2);
    输出:a1234bc1

    【讨论】:

      【解决方案4】:

      试试这个

      $myArray = array('a', 'b', 'c');
      
      foreach ($myArray as $k => $v) {
          echo $v;
          for ($i = 1; $i < 5; $i++) {
              echo $i; //a1234b1234c1234
          }
      }
      

      删除 if 条件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多