时间:2021-05-26
需求是这样 ...
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]。
第二种方式
<?phpfunction 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?>数据量大的时候个人没有做测试,不知道那种性能最优!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP弱类型语言中类型判断操作。分享给大家供大家参考,具体如下:1、php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再
描述有这样一道题,给出一个数字串A,需要判断A是否为连乘数字串,连乘数字串的定义就是一个数字串可以拆分成若干个数字,后面的数字(从第N个数字开始)为前面2个数字
C#实现大数字的运算1、添加引用:System.Numerics.dll2、添加命名空间:usingSystem.Numerics;3、实例:3.1判断一个数字
本文实例讲述了PHP编程快速实现数组去重的方法。分享给大家供大家参考,具体如下:概述使用PHP的array_unique()函数允许你传递一个数组,然后移除重复
本文实例讲述了PHP判断一个数组是另一个数组子集的方法。分享给大家供大家参考,具体如下:前言今天完成一个算法的过程中,有几个需求模块,其中就有判断$a数组是否是