PHP-数组索引区间的最快算法?

WP主题讨论 WP主题讨论 主题:1013 回复:2239

PHP-数组索引区间的最快算法?

晚风撩人 发布于 2017-02-25 字数 485 浏览 1372 回复 2

存在如下数组

array(
0 => array(
'level' => 0 ,
'discount' => 1
),
1000 => array(
'level' => 1 ,
'discount' => 0.99
) ,
2000 => array(
'level' => 2 ,
'discount' => 0.98
),
3000 => array(
'level' => 3 ,
'discount' => 0.97
)
//或更多

)

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(2

归属感 2017-09-15 2 楼

数组的键是一个等差数列,可以用以下方法算出属于哪个数组:

floor(2008/1000) * 1000;

但是需要判断最大的键,取出数组最后一个元素,与上边算出来的数比较,例如:

$keys = array_keys($arr);
$last = array_pop($keys);
$n = floor(2008/1000) * 1000;
$n = $n >= $last ? $last : $n;

$arr[$n]

晚风撩人 2017-05-15 1 楼

你可以将该数组的键值0、1000、2000、3000、....排序后,再用二分法查找就可以了。