php 快速判断一个数字属于什么范围的实现方法
发布:smiling 来源: PHP粉丝网 添加日期:2021-10-16 18:23:54 浏览: 评论:0
这篇文章主要介绍了php 快速判断一个数字属于什么范围的实现方法,需要的朋友可以参考下
需求是这样 ...
- if ( $foo > 0 && $foo < 100 ) $bar = 1;
- elseif ( $foo > 99 && $foo < 212 ) $bar = 2;
- elseif ( $foo > 211 && $foo < 324 ) $bar = 3;
- elseif ( $foo > 323 && $foo < 382 ) $bar = 4;
- elseif ( $foo > 381 && $foo < 465 ) $bar = 5;
- elseif ( $foo > 464 && $foo < 552 ) $bar = 6;
- # ...
这样的规则有上千条 ... 于是满屏幕都是 $foo > __ && $foo < __ $bar = __ ...
效率和美观都成问题 ...
临界点的数值近乎随机 ... 我想不到可以通过 $foo 推算 $bar 的公式 ...
目前的想法是把所有的规则二分掉 ... 这样可以提高效率 ... 但美观依然是问题 ...
如果封在一个函数里 ... 看上去似乎确实美观一些 ... 但效率反而不如这样 ...
有没有什么两者兼顾的比较完美的解决方案 ..?
追加 ... 自己写了一个借助数组排序的方案 ...
效率和自己实现函数差不多 ... 依然不如二分 ...
第一种方法
假设你的范围是之间是连续的(其实不连续也很容易实现)、没有重合的(这个没问题吧),那么通过对范围的起始位置排序,就可以很容易地用二分来实现。
$ranges = array(1, 100, 212, 324, 382, 465, 552);
然后你要做的事情就是用二分查找在ranges里面找到一个a[i]满足a[i] <= t && t < a[i+1]。
第二种方式
- <?php
- function sorts($stage_data,$stage_num) {
- array_push($stage_data,$stage_num);
- $data = array_unique($stage_data);
- //asort($data);
- sort($data);
- //var_dump($data);
- return array_search($stage_num,$data);
- }
- $stage_data = array(0,26,51,76,100);
- $stage_num = 16;
- echo sorts($stage_data,$stage_num);
- //res:1
- ?>
数据量大的时候个人没有做测试,不知道那种性能最优!
Tags: php判断数字范围
- 上一篇:PHP快速排序算法实例分析
- 下一篇:php实现微信发红包功能
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)