我正在尝试简化一些继承的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;
还是存在潜在的陷阱和/或更好的解决方案?
答案 0 :(得分:1)
ceil()
将永远不会返回除Integer之外的任何内容作为文档(即使它被转换为浮点数),Dave指出。
此外,由于Type Juggling,当您在需要整数的地方使用它时,它将被转换为整数。你应该100%安全。 ceil的整个点是向上舍入到最接近的整数: - )
答案 1 :(得分: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; }
并且尽管它占据了一些线条很容易低估并且易于维护/修改而不用考虑代码所做的那么多。