2013-07-22 96 views
9

我正在構建一個網站,每次頁面刷新時都會隨機顯示一個yelp列表。 yelp search api返回數組中的20個列表。現在,我使用PHP的函數rand(0,19)在每次刷新頁面時生成一個隨機列表($ business [rand(0,19)])。生成沒有重複的隨機數字

有人可以引用我一個更聰明的方法隨機化嗎?我想在重複其中任何一項之前顯示全部20個列表。什麼是處理這個問題的首選方法?

以下答案不起作用,因爲每次刷新頁面時都會重新創建數字。我猜我需要儲存我已經使用過的號碼嗎?

$numbers = range(0, 19); 

shuffle($numbers); 

// Handle Yelp response data 
$response = json_decode($data); 
$RANDOM = rand(1,19); 
$business = $response->businesses; 

echo "<img border=0 src='".$business[$RANDOM]->image_url."'><br/>"; 
echo $business[$RANDOM]->name."<br/>"; 
echo "<img border=0 src='".$business[$RANDOM]->rating_img_url_large."'><br/>"; 

?> 
+0

最簡單的方法是預先填充一個清理過的隨機值列表。你爲什麼不提前創建訂單,並選擇最後一個沒有顯示的訂單。對於臨時用戶來說,這看起來是隨機的。 –

+0

你如何保留所有20個以顯示他們?你是否在本地存儲列表,或者api是否根據請求向你發送相同的列表? –

+0

查看'Fisher Yates',或查看http://stackoverflow.com/questions/8116872/generate-random-numbers-in-array/8116947#8116947。 – paxdiablo

回答

30

最簡單的辦法:

$numbers = range(1, 20); 
shuffle($numbers); 

備選:

<?php 

function randomGen($min, $max, $quantity) { 
    $numbers = range($min, $max); 
    shuffle($numbers); 
    return array_slice($numbers, 0, $quantity); 
} 

print_r(randomGen(0,20,20)); //generates 20 unique random numbers 

?> 

類似的問題:#5612656

鍵盤:http://codepad.org/cBaGHxFU

更新:

你得到的所謂$businesses陣列中的所有物品。

  1. 使用上面給出的方法生成隨機列表ID,然後將其存儲到數據庫表中。
  2. 在每一頁刷新時,生成一個隨機列表ID,並檢查它是否與數據庫中的值匹配。如果沒有,則顯示該列表並將該值添加到您的表中。
  3. 轉到步驟1

當完成後,你會立刻顯示了所有的20個目錄。

希望這會有所幫助!

+1

對不起,我應該包含代碼以便更好地進行說明。請看我的編輯 – ryank

+0

@RyanGoo:更新。 –