php数组判断区间优化

<?php

// 根据数字算城市:

$a = [
    '深圳' => ['min' => 2, 'max' => 10],
    '四川' => ['min' => 8, 'max' => 30],
    '湖北' => ['min' => 32, 'max' => 60],
    '广东' => ['min' => 50, 'max' => 58],
];

$num = 9;
$data = [];

foreach ($a as $key => $value) {
    if ($num >= $value['min'] && $num <= $value['max']) {
        $data[] = $key;
    }
}

print_r($data);

/*Array
(
    [0] => 深圳
    [1] => 四川
)*/


// 请问如何优化?或者源数据如何改造才能优化到最佳?
阅读 4.5k
2 个回答

如果数据量非常大,可以考虑类似mysql的索引实现,使用树状索引。

如果数据量比较小,可以提前把num 集合都算出来,使用直接取就ok了。

都O(n)了,还怎么优化
只能改源数据结构啦,直接用数字索引数组放地区值就行了。就不用循环,直取。
例:

$a = [
9=>['深圳','四川'],
11=>['四川'],
56=>['湖北','广东'],
];
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题