for ループで奇妙な問題が発生しています。select_min、select_max、select_step の 3 つの配列キー (実際には選択ボックスを作成しています) に基づいて値を出力する関数に配列を渡しています。ほとんどの場合、それは機能します。最終的にインクリメントされない場合があります。適切に機能しない値もハードコーディングしてみました。
コードは次のとおりです。
for( $a = $property['select_min']; $a <= $property['select_max']; $a += $property['select_step'] ) {
echo $a . "<br/>";
}
0.1 から 1.2 の「ステップ」でテストしました。特定のインスタンスで機能しない理由がわかりません。小数値のみの問題のようです。
最小: 0、最大: 20、ステップ: 1 - これは機能し、0 ~ 20 を 1 刻みで出力します。
最小: 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() のチェックを追加しました。整数の場合は、表示をきれいにするために小数を削除し、末尾のゼロをオフにしています。それを行うためのより直接的な方法があるかもしれませんが、これは完全に機能します。
ありがとうございます!