1

別の変数の値に基づいて1つの変数に値を割り当てる、継承されたPHPコードを単純化しようとしています。大まかに言うと、次のようにマッピングされます。

if x < 50, y = 10
else if x >= 50 and < 100, y = 20
else if x >= 100 and < 350, y = 30
else y = 40

このための実際のPHPコードは数行を要し、理想からはほど遠いですが、パターンは十分にあるので、大幅に単純化できると思いますが、完全に単純なパターンでもありません。

これまでの私の最善のアイデアは、可能なy値を配列に割り当ててから、次のようにx値の上限に基づいてその配列のインデックスを呼び出すことです。

$convert = array (10, 20, 30, 30, 30, 30);
$y = ($x <= 350) ? $convert[ceil($x/50)] : 40;

2つの回線、冗長性がはるかに少なく、柔軟性がはるかに高くなります。しかし、それceilはfloatを返すので、配列のインデックスを生成するためにそれを信頼できるかどうかはわかりません。また、どちらの方法でもオンラインで何も見つかりませんでした。ある種の3.000000000001値を返す可能性がある場合は、次のように実行しても安全ですか。

$y = ($x <= 350) ? $convert[round(ceil($x/50))] : 40;

それとも、潜在的な落とし穴やより良い解決策がまだありますか?

4

2 に答える 2

1

ceil()ドキュメントとして整数以外のものを返すことは決してありません(たとえそれがfloatとしてキャストされたとしても)、そしてデイブは指摘しました。

また、型ジャグリングのため、整数が期待される場所で使用すると、整数としてキャストされます。あなたは100%安全でなければなりません。ceilの全体的なポイントは、最も近い整数に切り上げることです:-)

于 2011-12-19T17:16:55.903 に答える
1

コードに注意してください

if x < 50, y = 10
else if x >= 50 and < 100, y = 20
else if x >= 100 and < 350, y = 30
else y = 40

簡略化できます

<?php
if ($x < 50) { $y = 10; }
else if ($x < 100) { $y = 20; }
else if ($x < 350) { $y = 30; }
else { $y = 40; }

そして、それはいくつかの行を占めますが、コードが何をするのかをあまり考えずに、理解しやすく、管理/変更するのも簡単です。

于 2011-12-19T18:06:41.790 に答える