사용자 포인트에 따른 레벨 결정
<code>lv1:1~50 lv2:51~110 lv3:111~180 lv4:181~260 ...... 依次类推直到lv100</code>
사용자의 포인트에 따라 레벨을 빠르고 효율적으로 결정하는 방법은 무엇입니까? 만약에 몇개의 데이터로 판단하면 괜찮지만 100개의 if가 있으면 효율이 떨어지겠죠.. 혹시 좋은 방법 있으신가요?
답글 내용:
사용자 포인트에 따른 레벨 결정
<code>lv1:1~50 lv2:51~110 lv3:111~180 lv4:181~260 ...... 依次类推直到lv100</code>
사용자의 포인트에 따라 레벨을 빠르고 효율적으로 결정하는 방법은 무엇입니까? 만약에 몇개의 데이터로 판단하면 괜찮지만 100개의 if가 있으면 효율이 떨어지겠죠.. 혹시 좋은 방법 있으신가요?
이 문제를 해결하는 데 모두가 적극적으로 도움을 주는 모습을 보니 정말 감사합니다. 이 칼럼은 "Write Answers"라고 불리며 실제로는 답변이 아니며 단지 내 요구 사항을 충족할 뿐입니다.
이 솔루션은 실제로 사용자의 온라인 시간을 기준으로 사용자의 레벨을 판단하고, 일정 시간이 지나면 특정 레벨로 업그레이드하는 것입니다. 나중에 이 방법을 사용하여 사용자의 레벨 시간을 판단하기로 결정했습니다. 현재 레벨의 제곱은 다음 레벨에 필요한 시간입니다.
마지막으로 기간을 기준으로 사용자 레벨을 찾습니다
(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. 레벨 승격 지연이 허용되는 경우 사전에 계획된 것으로 간주되는 장기적으로 포인트가 상당히 로드될 수 있으므로 예약된 작업이나 비동기 대기열을 사용하여 계산을 처리하는 것이 좋습니다
꼭 이렇게 해서 포인트를 통해 레벨을 올리고 싶다면 모든 키-값 쌍을 직접 정의하고 공간을 활용해 시간을 교환하는 것이 좋다고 생각합니다. 실제 비즈니스 로직에는 레벨이 많지 않으며 알고리즘이 전혀 필요하지 않습니다. 이것이 가장 성능이 좋은 접근 방식입니다.
$arr[1]=“lv1”;$arr[2]=“lv1”;.....$arr [50 ]="lv1";
$arr[51]="lv2";$arr[52]="lv2";...$arr[110]="lv2";
...
...
...
...
규칙은 어떻게 되나요? 규칙이 없으면 규칙도 없습니다
= = 첫 번째 아이디어는 스위치 문을 활용하는 것이었습니다. 2층을 보고 나니 실력이 부족하고 계속 학습해야겠다는 생각이 들었습니다.
데이터베이스를 사용하면 더 안정적입니다. 루프의 성능과 판단에 도달하지 못한 경우. 데이터베이스는 100개의 작은 데이터 케이스를 저장하며 쿼리하기 쉽습니다. 또한, 귀하의 데이터 패턴은 프로그램의 판단에 적합하지 않습니다.
위층에서 첫 번째 솔루션을 채택했습니다
$rules = 배열(
<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와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

PHP에서, 특성은 방법 재사용이 필요하지만 상속에 적합하지 않은 상황에 적합합니다. 1) 특성은 클래스에서 다중 상속의 복잡성을 피할 수 있도록 수많은 방법을 허용합니다. 2) 특성을 사용할 때는 대안과 키워드를 통해 해결할 수있는 방법 충돌에주의를 기울여야합니다. 3) 성능을 최적화하고 코드 유지 보수성을 향상시키기 위해 특성을 과도하게 사용해야하며 단일 책임을 유지해야합니다.

의존성 주입 컨테이너 (DIC)는 PHP 프로젝트에 사용하기위한 객체 종속성을 관리하고 제공하는 도구입니다. DIC의 주요 이점에는 다음이 포함됩니다. 1. 디커플링, 구성 요소 독립적 인 코드는 유지 관리 및 테스트가 쉽습니다. 2. 유연성, 의존성을 교체 또는 수정하기 쉽습니다. 3. 테스트 가능성, 단위 테스트를 위해 모의 객체를 주입하기에 편리합니다.

SplfixedArray는 PHP의 고정 크기 배열로, 고성능 및 메모리 사용이 필요한 시나리오에 적합합니다. 1) 동적 조정으로 인한 오버 헤드를 피하기 위해 생성 할 때 크기를 지정해야합니다. 2) C 언어 배열을 기반으로 메모리 및 빠른 액세스 속도를 직접 작동합니다. 3) 대규모 데이터 처리 및 메모리에 민감한 환경에 적합하지만 크기가 고정되어 있으므로주의해서 사용해야합니다.

PHP는 $ \ _ 파일 변수를 통해 파일 업로드를 처리합니다. 보안을 보장하는 방법에는 다음이 포함됩니다. 1. 오류 확인 확인, 2. 파일 유형 및 크기 확인, 3 파일 덮어 쓰기 방지, 4. 파일을 영구 저장소 위치로 이동하십시오.

JavaScript에서는 NullCoalescingOperator (??) 및 NullCoalescingAssignmentOperator (?? =)를 사용할 수 있습니다. 1. 2. ??= 변수를 오른쪽 피연산자의 값에 할당하지만 변수가 무효 또는 정의되지 않은 경우에만. 이 연산자는 코드 로직을 단순화하고 가독성과 성능을 향상시킵니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

WebStorm Mac 버전
유용한 JavaScript 개발 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
