php 快速判斷一個(gè)數(shù)字屬于什么范圍的實(shí)現(xiàn)方法
需求是這樣 ...
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;
# ...
這樣的規(guī)則有上千條 ... 于是滿(mǎn)屏幕都是 $foo > __ && $foo < __ $bar = __ ...
效率和美觀(guān)都成問(wèn)題 ...
臨界點(diǎn)的數(shù)值近乎隨機(jī) ... 我想不到可以通過(guò) $foo 推算 $bar 的公式 ...
目前的想法是把所有的規(guī)則二分掉 ... 這樣可以提高效率 ... 但美觀(guān)依然是問(wèn)題 ...
如果封在一個(gè)函數(shù)里 ... 看上去似乎確實(shí)美觀(guān)一些 ... 但效率反而不如這樣 ...
有沒(méi)有什么兩者兼顧的比較完美的解決方案 ..?
追加 ... 自己寫(xiě)了一個(gè)借助數(shù)組排序的方案 ...
效率和自己實(shí)現(xiàn)函數(shù)差不多 ... 依然不如二分 ...
第一種方法
假設(shè)你的范圍是之間是連續(xù)的(其實(shí)不連續(xù)也很容易實(shí)現(xiàn))、沒(méi)有重合的(這個(gè)沒(méi)問(wèn)題吧),那么通過(guò)對(duì)范圍的起始位置排序,就可以很容易地用二分來(lái)實(shí)現(xiàn)。
$ranges = array(1, 100, 212, 324, 382, 465, 552);
然后你要做的事情就是用二分查找在ranges里面找到一個(gè)a[i]滿(mǎn)足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
?>
數(shù)據(jù)量大的時(shí)候個(gè)人沒(méi)有做測(cè)試,不知道那種性能最優(yōu)!
相關(guān)文章
PHP的偽隨機(jī)數(shù)與真隨機(jī)數(shù)詳解
這篇文章主要介紹了PHP的偽隨機(jī)數(shù)與真隨機(jī)數(shù)詳解,本文首先講解了真隨機(jī)數(shù)和偽隨機(jī)數(shù)的相關(guān)概念,并給出了比用mt_rand()函數(shù)產(chǎn)生更好的偽隨機(jī)數(shù)的一段例子代碼,需要的朋友可以參考下2015-05-05
php數(shù)據(jù)流中第K大元素的計(jì)算方法及代碼分析
在本篇文章里小編給大家整理了一篇關(guān)于php數(shù)據(jù)流中第K大元素的計(jì)算方法及代碼分析內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-07-07
PHP判斷一個(gè)數(shù)組是另一個(gè)數(shù)組子集的方法詳解
這篇文章主要介紹了PHP判斷一個(gè)數(shù)組是另一個(gè)數(shù)組子集的方法,結(jié)合實(shí)例形式分析了php循環(huán)遍歷、array_diff及array_intersect函數(shù)等方法實(shí)現(xiàn)數(shù)組子集判斷的相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
php中OR與|| AND與&&的區(qū)別總結(jié)
以下是對(duì)php中OR與|| AND與&&的區(qū)別進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過(guò)來(lái)參考下2013-10-10
php函數(shù)array_merge用法一例(合并同類(lèi)數(shù)組)
合并同類(lèi)型數(shù)組,array_merge ()函數(shù)的簡(jiǎn)單例子,供大家參考2013-02-02
ThinkPHP like模糊查詢(xún),like多匹配查詢(xún),between查詢(xún),in查詢(xún),一般查詢(xún)書(shū)寫(xiě)方法
ThinkPHP的數(shù)據(jù)庫(kù)條件查詢(xún)語(yǔ)句有字符串式,數(shù)組式書(shū)寫(xiě)方法,字符串式即是原生式而數(shù)組式的查詢(xún)語(yǔ)句因書(shū)寫(xiě)方式與特定字符的原因比較復(fù)雜,今天為大家講解一下ThinkPHP數(shù)組式查詢(xún)語(yǔ)句的書(shū)寫(xiě)方法2018-09-09
PHP面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)例分析
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)的方法,結(jié)合實(shí)例形式分析了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的聲明與實(shí)例化及類(lèi)中方法的調(diào)用技巧,需要的朋友可以參考下2016-01-01

