2013-07-22 8 views
9

私は、ページが更新されるたびに奇数リストをランダムに表示するウェブサイトを構築しています。 yelp search apiは20のリストを配列に返します。今、PHPの関数rand(0,19)を使用して、ページがリフレッシュされるたびにランダムなリストを生成しています($ businesses [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

Codepad:http://codepad.org/cBaGHxFU

更新:

あなたは$businessesという配列内のすべてのリストを取得しています。

  1. 上記の方法を使用してランダムなリスティングIDを生成し、データベーステーブルに保存します。
  2. 各ページの更新時に、ランダムなリスティングIDを生成し、データベース内の値と一致するかどうかを確認します。表示されていない場合は、そのリストを表示し、その値をテーブルに追加します。これが完了すると、一度にすべての20件のリストを表示しています。1.

をステップ

  • 移動します。

    希望すると便利です。

  • +1

    申し訳ありませんが、わかりやすさのためにコードを含めるべきです。私の編集 – ryank

    +0

    @ RyanGooを見てください:更新されました。 –

    関連する問題