Jadual Kandungan
回复内容:
Rumah pembangunan bahagian belakang tutorial php PHP如何根据用户积分快速判断用户等级?

PHP如何根据用户积分快速判断用户等级?

Aug 04, 2016 am 09:21 AM
php integral gred

根据用户积分判断等级

<code>lv1:1~50
lv2:51~110
lv3:111~180
lv4:181~260
......
依次类推直到lv100</code>
Salin selepas log masuk
Salin selepas log masuk

如何快速高效低根据用户的积分来判断等级?if的话判断几条数据还可以,如果到100个if的话,效率就下降了,大家有没有什么好的方法?

回复内容:

根据用户积分判断等级

<code>lv1:1~50
lv2:51~110
lv3:111~180
lv4:181~260
......
依次类推直到lv100</code>
Salin selepas log masuk
Salin selepas log masuk

如何快速高效低根据用户的积分来判断等级?if的话判断几条数据还可以,如果到100个if的话,效率就下降了,大家有没有什么好的方法?

看到大家都特别积极帮我解决这个问题真的特别感谢。这一栏叫“撰写答案”,其实也不算答案,只是解决了我的需求了。
这个解决方法其实是根据用户的在线时长来判断用户的等级,满足一定的时长就升级到多少级别,后来决定用这种方法来判断用户的等级时长:当前等级的平方,为下一等级所需的时长数。
最后根据时长来求用户等级

(int)sqrt($onlinetime)+1;
Salin selepas log masuk

PHP如何根据用户积分快速判断用户等级?

<code><?php
function getLevel($point) {
    $level = 0;
    while($point >= 0) {
        $point -= 50 + $level++ * 10;
    }
    return $level;
}</code>
Salin selepas log masuk

建议直接在数据库维护储存用户等级信息,不然使用简单的范围查询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>
Salin selepas log masuk

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>
Salin selepas log masuk

)
99积分
遍历数组
foreach($rules as $k=>$v){

<code>if($v[1]<99<$v[2]){
    //这里可以取出等级
}</code>
Salin selepas log masuk

}

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;
            }
        }
    }
Salin selepas log masuk

效率不高,期待更好算法。

<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>
Salin selepas log masuk
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

CakePHP Bekerja dengan Pangkalan Data CakePHP Bekerja dengan Pangkalan Data Sep 10, 2024 pm 05:25 PM

Bekerja dengan pangkalan data dalam CakePHP adalah sangat mudah. Kami akan memahami operasi CRUD (Buat, Baca, Kemas Kini, Padam) dalam bab ini.

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Pembalakan CakePHP Pembalakan CakePHP Sep 10, 2024 pm 05:26 PM

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

See all articles