我有这个代码块
<?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 ? 我错过了什么吗?
因为,
-
在 foreach 的第一次迭代中,
$k
的值是0
的,并且 for 循环中没有0
,它覆盖所有并打印所有 1 到 4,因此输出a1234
-
在第二次迭代中 foreach 值
$k
是1
,for 循环从1
开始,所以在 if 条件下它处于第一次迭代,所以循环在 for 循环的第一次迭代中停止并只打印 b,所以输出是a1234b
-
同样,在第三次迭代中,
$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
}
}
删除如果条件 。