Comment garantir des nombres aléatoires uniques sans répétitions en PHP ?

Barbara Streisand
Libérer: 2024-10-21 11:58:02
original
797 Les gens l'ont consulté

How to Ensure Unique Random Numbers Without Repeats in PHP?

Générer des nombres aléatoires sans répétitions

Votre méthode actuelle de génération d'annonces Yelp aléatoires à l'aide de la fonction rand() ne garantit pas des annonces uniques. Pour éviter les doublons, envisagez de mettre en œuvre une stratégie de randomisation plus intelligente.

Une approche consiste à utiliser la fonction native shuffle() sur une plage de nombres représentant les indices de liste. Cela génère un tableau mélangé sans doublons :

<code class="php">$numbers = range(0, 19);
shuffle($numbers);</code>
Copier après la connexion

Une méthode alternative consiste à créer une fonction randomGen() personnalisée qui accepte les paramètres pour la quantité minimale, maximale et souhaitée de nombres aléatoires :

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

Pour implémenter cela dans votre script PHP, générez un identifiant de liste aléatoire à l'aide de randomGen() et stockez-le dans une table de base de données. À chaque actualisation de page, vérifiez si l'ID de liste généré correspond à la valeur stockée. Sinon, affichez cette liste et mettez à jour le tableau avec le nouvel identifiant.

Cette approche garantit que les 20 listes sont affichées une fois avant que des répétitions ne se produisent. Voici un extrait de code mis à jour :

<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>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!