生成不重复的随机数
您当前使用 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中文网其他相关文章!