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

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

Barbara Streisand
Barbara Streisand원래의
2024-10-21 11:58:02803검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.