Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memastikan Nombor Rawak Unik Tanpa Ulangan dalam PHP?

Bagaimana untuk Memastikan Nombor Rawak Unik Tanpa Ulangan dalam PHP?

Barbara Streisand
Barbara Streisandasal
2024-10-21 11:58:02803semak imbas

How to Ensure Unique Random Numbers Without Repeats in PHP?

Menjana Nombor Rawak Tanpa Ulangan

Kaedah semasa anda menjana penyenaraian Yelp rawak menggunakan fungsi rand() tidak memastikan penyenaraian unik. Untuk mengelakkan pendua, pertimbangkan untuk melaksanakan strategi rawak yang lebih bijak.

Satu pendekatan ialah menggunakan fungsi shuffle() asli pada julat nombor yang mewakili indeks penyenaraian. Ini menjana tatasusunan yang dikocok tanpa pendua:

<code class="php">$numbers = range(0, 19);
shuffle($numbers);</code>

Kaedah alternatif adalah untuk mencipta fungsi rawakGen() tersuai yang menerima parameter untuk kuantiti nombor rawak minimum, maksimum dan dikehendaki:

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

Untuk melaksanakan ini dalam skrip PHP anda, hasilkan ID penyenaraian rawak menggunakan randomGen() dan simpannya dalam jadual pangkalan data. Pada setiap muat semula halaman, semak sama ada ID penyenaraian yang dijana sepadan dengan nilai yang disimpan. Jika tidak, paparkan penyenaraian itu dan kemas kini jadual dengan ID baharu.

Pendekatan ini memastikan kesemua 20 penyenaraian dipaparkan sekali sebelum sebarang pengulangan berlaku. Berikut ialah coretan kod yang dikemas kini:

<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>

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Nombor Rawak Unik Tanpa Ulangan dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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