php 快速判断一个数字属于什么范围的实现方法

 更新时间:2018年07月11日 15:29:10   作者:gb4215287  
这篇文章主要介绍了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
?>

数据量大的时候个人没有做测试,不知道那种性能最优!

相关文章

  • PHP CURL与java http使用方法详解

    PHP CURL与java http使用方法详解

    这篇文章主要为大家详细介绍了PHP CURL与java http使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • phpmyadmin打开很慢的解决方法

    phpmyadmin打开很慢的解决方法

    这篇文章主要介绍了phpmyadmin打开很慢的解决方法,一般这个问题的原因是phpmyadmin的版本检测造成的,因为phpmyadmin的官网有时会打不开,这时只要取消代码中的版本检测即可解决这个问题,需要的朋友可以参考下
    2014-04-04
  • PHP中COOKIES使用示例

    PHP中COOKIES使用示例

    这篇文章主要介绍了PHP中COOKIES使用示例的相关资料,需要的朋友可以参考下
    2015-07-07
  • PHP中的错误及其处理机制

    PHP中的错误及其处理机制

    这篇文章主要介绍了PHP中错误和异常的概念,帮助大家更好的理解和学习使用PHP,感兴趣的朋友可以了解下
    2021-04-04
  • 详解Laravel制作API接口

    详解Laravel制作API接口

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。本文将详细介绍Laravel制作API接口。
    2021-05-05
  • Php Mssql操作简单封装支持存储过程

    Php Mssql操作简单封装支持存储过程

    没有啥太多的功能,就是简单封装,也没有缓存,平时用ezSQL,但是ezSQL不支持存储过程,所以这里封装了存储过程,因为自己的需要,只是做一个标记在这里而已。
    2009-12-12
  • Cannot modify header information错误解决方法

    Cannot modify header information错误解决方法

    Warning: Cannot modify header information - headers already sent by出错的原因
    2008-10-10
  • php解析字符串函数sscanf的实用方法

    php解析字符串函数sscanf的实用方法

    在PHP编程中,有时需要对字符串进行解析,而sscanf函数就是一种非常方便的解析工具,本文详细介绍了sscanf函数的用法,包括基本用法和高级用法,通过大量的示例代码,展示了如何使用sscanf函数解析各种不同格式的字符串
    2023-09-09
  • php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法

    php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法

    以下是对php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解

    PHP导出EXCEL快速开发指南--PHPEXCEL的使用详解

    本篇文章是对PHPEXCEL的使用进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论