嵌套循环逻辑


Nested loop logic

我有这个代码块

<?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 ? 我错过了什么吗?

因为,

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

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

  3. 同样,在第三次迭代中,$k 的值是2的,for 循环从 1 开始,所以在 if 条件下它在第二次迭代中,所以循环在打印 c1 后的 for 循环的第二次迭代中停止,所以输出是a1234bc1

我想现在你很清楚了。

foreach ($myArray as $k => $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执行并终止oputput

最终输出:

A1234BC1

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

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

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

试试这个

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

删除如果条件 。