首页 > 解决方案 > PHP - 切换 var 值自动增量在 While 内意外工作

问题描述

希望你能帮我解决这个问题......所以基本上,我正在测试一个 While 内的开关,它循环并比较值(一旦某个值达到限制 $numRow,while 结束并停止执行其余代码) .

我的代码如下:

    <?php

$n = 0;
$i = 0;
$numRows = 4;

while ($n <= $numRows){
    switch($i++){
        case 1:
            if($i == $numRows){
                echo 'Case 1:La variable i ='.$i.' es igual a la cantidad de columnas n='.$n."<br/>"; 
                
            } else {
                echo 'Case 1: La variable i ='.$i.' es diferente a la cantidad de columnas n='.$n."<br/>";   
            }
            break;
        case 2:
            if($i == $numRows){
                echo 'Case 2:La variable i ='.$i.' es igual a la cantidad de columnas n='.$n."<br/>";   
            } else {
                echo 'Case 2:La variable i ='.$i.' es diferente a la cantidad de columnas n='.$n."<br/>";   
            }
            break;
        case 3:
            if($i == $numRows){
                echo 'Case 3:La variable i ='.$i.' es igual a la cantidad de columnas n='.$n."<br/>";   
            } else {
                echo 'Case 3:La variable i ='.$i.' es diferente a la cantidad de columnas n='.$n."<br/>";   
            }
            break;
        case 4:
            if($i == $numRows){
                echo 'Case4:La variable i ='.$i.' es igual a la cantidad de columnas n='.$n."<br/>";   
            } else {
                echo 'Case 4:La variable i ='.$i.' es diferente a la cantidad de columnas n='.$n."<br/>";   
            }
            break;
        case 5:
            if($i == $numRows){
                echo 'Case 5:La variable i ='.$i.' es igual a la cantidad de columnas n='.$n."<br/>";   
            } else {
                echo 'Case 5: La variable i ='.$i.' es diferente a la cantidad de columnas n='.$n."<br/>";   
            }
            break;
    }
    $n++;
    echo $n;
}
    

我觉得奇怪的是代码的输出。变量 $I 应该从 1 开始,但在情况 1 中,它取 2 的值……这可能吗?代码中没有其他操作将 +1 与变量相加...

输出:

1Case 1: La variable i =2 es diferente a la cantidad de columnas n=1
2Case 2:La variable i =3 es diferente a la cantidad de columnas n=2
3Case 3:La variable i =4 es igual a la cantidad de columnas n=3
4Case 4:La variable i =5 es diferente a la cantidad de columnas n=4
5

是否有任何拼写错误或我在语法上做错了什么?我正在学习PHP作为一种爱好,所以想了解这里是否有任何新手错误:)

提前致谢!

标签: phphtmlwhile-loopswitch-statement

解决方案


使用预增量:++$i而不是$i++

switch(++$i){
//...
}

发生的情况是,当您进行后增量 ( $i++) 时,变量不会立即采用新值。只有当您再次使用该变量时,它才会采用新值。所以当你在 switch 增量时$i仍然是1. 然后在 中case: 1,当您使用变量时,会发生实际增量,它显示 2 而不是 1。

这将与执行以下操作完全相同:

$++;
switch($i){
//...
}

在此处阅读更多相关信息。


推荐阅读