產生不重複的隨機數
您目前使用 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中文網其他相關文章!