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;

两条线,更少的冗余和更多的灵活性。但是我看到它ceil返回一个浮点数,所以我不确定我是否可以信任它来生成数组的索引,而且我还没有在网上找到任何关于它的信息。如果它可能返回某种3.000000000001值,那么我这样做是否安全:

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

还是还有潜在的陷阱和/或更好的解决方案?

4

2 回答 2

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 回答
1

ceil()除了 Integer 作为文档之外,永远不会返回任何东西(即使它被转换为浮点数),Dave 指出。

此外,由于Type Juggling,当您在需要整数的地方使用它时,它将被转换为整数。你应该是 100% 安全的。ceil 的全部要点是四舍五入到最接近的整数:-)

于 2011-12-19T17:16:55.903 回答