ホームページ > バックエンド開発 > PHPチュートリアル > PHP で重複のない一意の乱数を確保するにはどうすればよいですか?

PHP で重複のない一意の乱数を確保するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-21 11:58:02
オリジナル
899 人が閲覧しました

How to Ensure Unique Random Numbers Without Repeats in PHP?

繰り返しのない乱数の生成

rand() 関数を使用してランダムな Yelp リストを生成する現在の方法では、一意のリストが保証されません。重複を防ぐには、より賢いランダム化戦略の実装を検討してください。

1 つのアプローチは、リストのインデックスを表す数値範囲に対してネイティブ 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 個のリストすべてが 1 回表示されます。更新されたコード スニペットは次のとおりです:

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート