我对 for 循环有一个奇怪的问题。我将一个数组传递给一个函数,该函数根据三个数组键输出值(它实际上是在创建一个选择框):select_min、select_max 和 select_step。大多数时候,它有效。有时它不会增加最后的时间。我也尝试对无法正常工作的值进行硬编码。
代码是:
for( $a = $property['select_min']; $a <= $property['select_max']; $a += $property['select_step'] ) {
echo $a . "<br/>";
}
我已经用 0.1 到 1.2 的“步长”对其进行了测试。我无法弄清楚为什么它在某些情况下不起作用。这似乎只是十进制值的问题。
最小值:0,最大值:20,步长:1 - 这可以工作,以 1 为增量输出 0-20。
最小值:0.2,最大值:3,步长:0.2 - 这不起作用,以 0.2 为增量输出 0.2 到 2.8,但不输出 3。不管我放什么最大值,它似乎总是失败......除了当我从 0 运行到 22 时它起作用了。
最小值:0,最大值:7,步长:0.7 - 这不起作用。不输出 7。
有趣的案例:
最小值:0,最大值:3、6 或 9,步长:0.3 - 有效
最小值:0,最大值:12 或 15,步长:0.3 - 不起作用
我已经完成了许多其他测试,但无法找到为什么它在这些特定情况下不起作用的共同线索。
编辑:感谢所有的回复。我最终使用了 Petah 的解决方案并想出了这个:
for( $a = $property['select_min'];
bccomp( $a , $property['select_max'] , 1 ) <= 0;
$a = bcadd( $a , $property['select_step'] , 1 ) ) {
$str_editor_html .= '<option value="' . ( !is_float( $property['select_step'] ) ? str_replace( ".0" , "" , $a ) : $a ) . '"' . ( strval( $value['setting'] ) == strval( $a ) ? ' SELECTED' : '' ) . '>' . ( !is_float( $property['select_step'] ) ? str_replace( ".0" , "" , $a ) : $a ) . '</option>';
}
我在“step”变量上添加了对 !is_float() 的检查。如果它是一个整数,我将去除小数并尾随零以保持显示清洁度。可能有更直接的方法可以做到这一点,但这非常有效。
再次感谢大家!