> 백엔드 개발 > PHP 튜토리얼 > PHP에서 반복 없이 고유한 난수를 보장하는 방법은 무엇입니까?

PHP에서 반복 없이 고유한 난수를 보장하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-10-21 11:58:02
원래의
874명이 탐색했습니다.

How to Ensure Unique Random Numbers Without Repeats in PHP?

반복 없이 난수 생성

rand() 함수를 사용하여 무작위 Yelp 목록을 생성하는 현재 방법은 고유한 목록을 보장하지 않습니다. 중복을 방지하려면 더 스마트한 무작위 전략 구현을 고려하세요.

한 가지 접근 방식은 목록 색인을 나타내는 숫자 범위에 기본 shuffle() 함수를 사용하는 것입니다. 이렇게 하면 중복되지 않은 섞인 배열이 생성됩니다.

<code class="php">$numbers = range(0, 19);
shuffle($numbers);</code>
로그인 후 복사

대체 방법은 최소, 최대 및 원하는 난수 수량에 대한 매개 변수를 허용하는 사용자 정의randomGen() 함수를 만드는 것입니다.

<code class="php">function randomGen($min, $max, $quantity) {
    $numbers = range($min, $max);
    shuffle($numbers);
    return array_slice($numbers, 0, $quantity);
}</code>
로그인 후 복사

이를 PHP 스크립트에서 구현하려면 randomGen()을 사용하여 무작위 목록 ID를 생성하고 데이터베이스 테이블에 저장하세요. 페이지를 새로 고칠 때마다 생성된 목록 ID가 저장된 값과 일치하는지 확인하세요. 그렇지 않은 경우 해당 목록을 표시하고 새 ID로 테이블을 업데이트합니다.

이 접근 방식을 사용하면 반복이 발생하기 전에 20개 목록이 모두 한 번 표시됩니다. 업데이트된 코드 조각은 다음과 같습니다.

<code class="php"><?php

$businesses = json_decode($data);

$db = new PDO('mysql:host=localhost;dbname=yelp_listings', 'root', 'password');

// Generate a random listing ID using randomGen()
$listing_id = randomGen(1, 20, 1)[0];

// Check if the listing ID matches the stored value
$stmt = $db->prepare('SELECT listing_id FROM shown_listings WHERE id = ?');
$stmt->execute([$listing_id]);

// Display the listing if it hasn't been shown yet
if ($stmt->rowCount() == 0) {
    $business = $businesses->businesses[$listing_id - 1];

    echo "<img border=0 src='" . $business->image_url . "'><br/>";
    echo $business->name . "<br/>";
    echo "<img border=0 src='" . $business->rating_img_url_large . "'><br/>";

    // Add the listing ID to the shown_listings table
    $stmt = $db->prepare('INSERT INTO shown_listings (id) VALUES (?)');
    $stmt->execute([$listing_id]);
}

?></code>
로그인 후 복사

위 내용은 PHP에서 반복 없이 고유한 난수를 보장하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿