使用ceil获取PHP数组的索引

时间:2011-12-19 16:45:29

标签: php ceil

我正在尝试简化一些继承的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;

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

2 个答案:

答案 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; }

并且尽管它占据了一些线条很容易低估并且易于维护/修改而不用考虑代码所做的那么多。