依使用者積分判斷等級
<code>lv1:1~50 lv2:51~110 lv3:111~180 lv4:181~260 ...... 依次类推直到lv100</code>
如何快速高效低根據用戶的積分來判斷等級? if的話判斷幾個數據還可以,如果到100個if的話,效率就下降了,大家有沒有什麼好的方法?
回覆內容:
依使用者積分判斷等級
<code>lv1:1~50 lv2:51~110 lv3:111~180 lv4:181~260 ...... 依次类推直到lv100</code>
如何快速高效低根據用戶的積分來判斷等級? if的話判斷幾個數據還可以,如果到100個if的話,效率就下降了,大家有沒有什麼好的方法?
看到大家都特別積極幫我解決這個問題真的特別感謝。這一欄叫“寫答案”,其實也不算答案,只是解決了我的需求了。
這個解決方法其實是根據用戶的在線時長來判斷用戶的等級,滿足一定的時長就升級到多少級別,後來決定用這種方法來判斷用戶的等級時長:當前等級的平方,為下一等級所需的時長數。
最後根據時間長度來求使用者等級
(int)sqrt($onlinetime)+1;
<code><?php function getLevel($point) { $level = 0; while($point >= 0) { $point -= 50 + $level++ * 10; } return $level; }</code>
建議直接在資料庫中維護儲存使用者等級信息,不然使用簡單的範圍查詢SQL可能導致你的索引失效。
資料如果沒規律不想存資料庫就用二分查找,找到所有等級的中間等級的積分上限,如果用戶積分大於這個上線的話就遞歸查找比這個等級大的等級,否則就遞歸查找比這個中間等級小的等級。 。
評論裡的「積分/50演算法」顯然是不能滿足樓主的積分等級判斷的,因為積分等級法則可能會變動,而且這個演算法本身就有問題。
有序的資料查找可以用二分法來查找,給你一個簡單實現的程式碼
<code><?php /** * 二分法查找 * * @param int $score 积分 * @param array $filter 积分规则 * * @return array $filter */ function search($score, $filter) { $half = floor(count($filter) / 2); // 取出中間数 // 判断积分在哪个区间 if ($score <= $filter[$half - 1]['max']) { $filter = array_slice($filter, 0 , $half); } else { $filter = array_slice($filter, $half , count($filter)); } // 继续递归直到只剩一个元素 if (count($filter) != 1) { $filter = search($score, $filter); } return $filter; } $filter = [ ['level' => 1, 'min' => 1, 'max' => 50], ['level' => 2, 'min' => 51, 'max' => 110], ['level' => 3, 'min' => 111, 'max' => 180], ['level' => 4, 'min' => 181, 'max' => 260], ['level' => 5, 'min' => 261, 'max' => 500], ]; $result = search(240, $filter); echo current($result)['level']; </code>
1.在用戶表冗餘一個等級字段,每次新增積分的時候順帶判斷下,如果等級提升了就加1,這個算是實時的一個方案
2.如果允許等級提升延遲,建議用定時任務或非同步隊列處理計算,因為積分長遠看或許還是比較有負載的,算是提前規劃了
我覺得 如果你真實要做這個透過積分得到等級 建議你直接全部定義鍵值對 利用空間換時間。實際業務邏輯 不會有很多等級,根本不需要什麼演算法。這是效能最高的做法,這個陣列你自己寫程式碼產生下就ok了
$arr[1]=「lv1」;$arr[2]=「lv1」;.......$arr[50 ]="lv1";
$arr[51]=“lv2”;$arr[52]=“lv2”;.......$arr[110]="lv2";
...
. ..
...
...
規則呢?沒有規矩,不成方圓
= = 第一個想法是用switch語句,看了2樓的感覺自己好low 還需要繼續學習啊
用資料庫吧,靠譜點。循環和if判斷性能都達不到。資料庫儲存100個資料小case,查詢也很輕鬆。另外你數據的這種規律,並不適合在程式裡進行判斷。
我是採取的樓上第一個解決方案
$rules = array(
<code>[1]=>array(1,50), [2]=>array(51,110), [3]=>array(111,180)</code>
)
99積分
遍歷數組
foreach($rules as $k=>$v){
<code>if($v[1]</code>
}
function getLevel($point) { $level = [ 0 => ['max' => 1000, 'min' => 0, 'name' => '新手', 'level' => 1], 1 => ['max' => 10000, 'min' => 1000, 'name' => '小将', 'level' => 2], 2 => ['max' => 20000, 'min' => 10000, 'name' => '中将', 'level' => 3], 3 => ['max' => 50000, 'min' => 20000, 'name' => '上将', 'level' => 4], 4 => ['max' => 100000, 'min' => 50000, 'name' => '大将', 'level' => 5], 5 => ['max' => 999999999, 'min' => 100000, 'name' => '将军', 'level' => 6], ]; foreach ($level as $value) { if (($point >= $value['min']) && ($point < $value['max'])) { return $value; } } }
效率不高,期待更好算法。
<code>public function gradefun($gf)//用户等级函数 { $arr = array(120000 => 12, 80000 => 11, 50000 => 10, 30000 => 9, 12000 => 8, 8000 => 7, 5000 => 6, 2500 => 5, 1200 => 4, 500 => 3, 100 =>2, 0 => 1); foreach ($arr as $key => $value) { if ($gf >= $key) { return $value; } } } 这个可以解决等级数小的,大的不清楚,没用过。</code>

PHP在現代編程中仍然是一個強大且廣泛使用的工具,尤其在web開發領域。 1)PHP易用且與數據庫集成無縫,是許多開發者的首選。 2)它支持動態內容生成和麵向對象編程,適合快速創建和維護網站。 3)PHP的性能可以通過緩存和優化數據庫查詢來提升,其廣泛的社區和豐富生態系統使其在當今技術棧中仍具重要地位。

在PHP中,弱引用是通過WeakReference類實現的,不會阻止垃圾回收器回收對象。弱引用適用於緩存系統和事件監聽器等場景,需注意其不能保證對象存活,且垃圾回收可能延遲。

\_\_invoke方法允許對象像函數一樣被調用。 1.定義\_\_invoke方法使對象可被調用。 2.使用$obj(...)語法時,PHP會執行\_\_invoke方法。 3.適用於日誌記錄和計算器等場景,提高代碼靈活性和可讀性。

Fibers在PHP8.1中引入,提升了並發處理能力。 1)Fibers是一種輕量級的並發模型,類似於協程。 2)它們允許開發者手動控制任務的執行流,適合處理I/O密集型任務。 3)使用Fibers可以編寫更高效、響應性更強的代碼。

PHP社區提供了豐富的資源和支持,幫助開發者成長。 1)資源包括官方文檔、教程、博客和開源項目如Laravel和Symfony。 2)支持可以通過StackOverflow、Reddit和Slack頻道獲得。 3)開發動態可以通過關注RFC了解。 4)融入社區可以通過積極參與、貢獻代碼和學習分享來實現。

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具