PHP while循环忽略其条件

时间:2017-02-01 23:45:25

标签: php arrays while-loop

目前我尝试在php中创建一个函数,它只是读取数组字段的int值并将其与最大值进行比较。
如果达到此最大值,则应将该字段的值设置为零,跳转到数组中的下一个字段并增加存储在其中的int值。
如果此值也达到最大值,请执行与上述相同的操作 如果上述条件不成立,则只增加数组中的存储值。

我的代码如下:

if($sign_counter[0] === (count($pw_signs) - 1)){
    $counter = 0;
    while($sign_counter[$counter] === (count($pw_signs) - 1)){
        $sign_counter[$counter] = "0";
        $counter++;
    }
    $sign_counter[$counter]++;
}
else{
    $sign_counter[0]++;
}

我已经在我的网站和浏览器上使用不同的值多次测试了这部分功能。我还检查了值是否正确存储在数组中和所需的变量中。

这就是我的数组的样子:

$sign_counter = array("38", "2");

例如:

用于存储int值的

$ sign_counter 数组
(count($ pw_signs) - 1)总是等于38(因为计数数组中有39个字段)
$ counter 用于确定数组中的字段位置

现在,如果我将值“38”存储在第一个字段中并且“2”存储在数组的第二个字段中,则代码应该检测到,在第一个字段中达到最大值,将字段的值设置为0,然后跳转到下一个字段并将其值增加1.

而不是我想要实现的代码只是增加了数组第一个字段的值 看起来while循环只是忽略了它自己的条件,但值本身似乎不是问题。

我真的不明白为什么while循环的行为是这样的。
我完全错过了什么吗?

感谢任何帮助 问候困了

1 个答案:

答案 0 :(得分:6)

问题是,您要将值存储为字符串,而不是数字,并且您正在使用===运算符,该运算符不会在不同类型之间执行类型强制。 count($pw_signs) - 1将始终是一个数字,而不是字符串,所有===测试都将失败。

摆脱所有数字周围的引号,它应该按照需要工作。如果值的来源是外部的,请在存储到数组之前将它们转换为intval()的数字。