PHP,怎么查找一个数在哪个区间?

如题,人比较笨,希望大佬能贴上代码。
比如提供一个数,123
又提供一个用于计算区间的数组
[10,20,50,100,200,500]
返回100,或者下标3

一个个比好像有点笨,数据多的时候也明显不合适,想求一个好一点的解法。

阅读 2.9k
3 个回答

这题我会,这可难不住我这个大聪明,什么排序啊,查找啊啥的,全部用PHP内置函数,最多加两个判断就可以了。

$arr = [10, 20, 50, 100, 200, 500];


function findIndex($arr, $num)
{
    $arr[] = $num;
    sort($arr);
    $index = array_search($num, $arr);

    $lastIndex = $index - 1;
    $nextIndex = $index + 1;
    if ($lastIndex < 0) {
        return $index;
    } elseif ($nextIndex >= count($arr)) {
        return $index;
    } else {
        return $arr[$lastIndex] <= $arr[$index]
        && $arr[$index] < $arr[$nextIndex]
            ? $lastIndex
            : $index;
    }
}

$res = findIndex($arr, 123);
var_dump($res);

这个其实比较简单,就是依次比较判断,其实大多数情况下没有必要用高端的算法:

$in = 123;
$A = array(10,20,50,100,200,500);
$ALen =  count( $A );
$i=0;
for ( $i=0;$i<Alen;$i++){
    if ($A[$i] <= $in  and $in<$A[$i+1]){
        return $i;
        break;
    }
}
// 这时$i 肯定就是对应的索引。

不过题主没有考虑0-9这些数字对应区间?

用二分法即可

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题