Maison  >  Article  >  développement back-end  >  Comment garantir des nombres aléatoires uniques sans répétitions en PHP ?

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-21 11:58:02799parcourir

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>

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>

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>

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!

Déclaration:
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