Php 嵌套循环逻辑

Php 嵌套循环逻辑,php,nested-loops,Php,Nested Loops,我有这个代码块 <?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之后的值之前

我有这个代码块

<?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

  • 类似地,在foreach的第三次迭代中,
    $k
    的值是
    2
    ,而for循环从
    1
    开始,因此在if条件下,它处于第二次迭代中,所以循环在打印c1之后的for循环的第二次迭代中停止,所以输出是
    a1234bc1

  • 我想你现在明白了。

    因为

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

  • 在foreach中的第二次迭代中,
    $k
    的值是
    1
    ,for循环从
    1
    开始,因此在if条件下,它处于第一次迭代中,因此循环在for循环的第一次迭代中停止并仅打印b,因此输出是
    a1234b

  • 类似地,在foreach的第三次迭代中,
    $k
    的值是
    2
    ,而for循环从
    1
    开始,因此在if条件下,它处于第二次迭代中,所以循环在打印c1之后的for循环的第二次迭代中停止,所以输出是
    a1234bc1

  • 我想你现在明白了。

    foreach($k=>v)循环执行3次
    $myArray
    有3个元素

    第一次跑步

    $k
    =0,它是第一个元素的索引,
    $v
    =“a”

    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    
    for ($i = 1; $i < 5; $i++)
    
    for ($i = 1; $i < 5; $i++) { ... }
    
    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    
    for ($i = 1; $i < 5; $i++)
    
    for ($i = 1; $i < 5; $i++) { ... }
    
    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    
    for ($i = 1; $i < 5; $i++)
    
    for ($i = 1; $i < 5; $i++) { ... }
    
    for($i=1;$i<5;$i++){…}
    
    输出从1到5的所有数字,并在满足
    $k
    的精确值后停止。作为
    $k
    euqals 2,这次循环在输出1后执行。第二次运行时,
    break
    执行并终止oputput

    最终输出:

    a1234bc1

    您可以
    foreach($myArray as$k=>$v)
    循环执行3次,因为
    $myArray
    有3个元素

    第一次跑步

    $k
    =0,它是第一个元素的索引,
    $v
    =“a”

    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    
    for ($i = 1; $i < 5; $i++)
    
    for ($i = 1; $i < 5; $i++) { ... }
    
    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    
    for ($i = 1; $i < 5; $i++)
    
    for ($i = 1; $i < 5; $i++) { ... }
    
    循环的输出

    for ($i = 1; $i < 5; $i++) { ... }
    
    for ($i = 1; $i < 5; $i++)
    
    for ($i = 1; $i < 5; $i++) { ... }
    
    for($i=1;$i<5;$i++){…}
    
    输出从1到5的所有数字,并在满足
    $k
    的精确值后停止。作为
    $k
    euqals 2,这次循环在输出1后执行。第二次运行时,
    break
    执行并终止oputput

    最终输出:

    a1234bc1


    试试这个

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

    删除if条件。

    尝试此操作

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

    删除if条件。

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

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

    3次迭代:
    第一个循环
    $k=2$v=c
    第二圈
    $i等于$k(即2)

    输出:a1234bc1

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

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

    3次迭代:
    第一个循环
    $k=2$v=c
    第二圈
    $i等于$k(即2)

    输出:a1234bc1

    想要这个吗?A1234B1234C1234您期望的输出是什么?@devpro否我想对前面的代码进行一些解释?为什么是a1234bc1为什么不是a1234bc1234@FatalError因为在那个阶段,$i和$k的值等于2(两者都相等)。是的,它首先在forloop中,它将$i打印为1。然后,$i增加到2。要这样做吗?A1234B1234C1234您期望的输出是什么?@devpro否我想对前面的代码进行一些解释?为什么是a1234bc1为什么不是a1234bc1234@FatalError因为您的$i和$k值在该阶段等于2(两者都相等)。是的,它首先在forloop中,它将$i打印为1。然后$i递增为2。第一次迭代的输出将是1234而不是12345第一次迭代的输出将是1234而不是12345