3

私が達成したいのは、MySQLDBから毎回異なるコンテンツを生成するWebページを作成することです。しかし、rand()関数を使用すると、いくつかのオプションが繰り返される可能性があります。だから私がやりたいのは、ウェブページのコンテンツが生成されるたびに更新される動的配列「例外」を使用してrand()関数を作成することです。これにより、すべてのオプションがユーザーに1回だけ表示されます。

5つの異なるオプション1、2、3、4、5があるとしましょう

次回rand()関数が3を選択した場合、結果として3を取得する可能性はありません。

function randWithout($from, $to, array $exceptions) {
sort($exceptions); 
$number = rand($from, $to - count($exceptions));
foreach ($exceptions as $exception) {
    if ($number >= $exception) {
        $number++; 
    } else  {
        break;
    }
}

    return $number;
}

    $exceptions = array("3","4");
    $random = randWithout(1, $num_rows, $exceptions);

これは私が望むことを行いますが、配列「$exceptions」を毎回更新したいです...

セッションまたは他のオプションを使用してこれを行う方法はありますか?別のMySQLテーブルを使用したくない..高速でシンプルにしたい

ありがとうございました

4

2 に答える 2

2

セッションを使用します。セッションはデータの永続性に使用されます。次のようにphpファイルを開始します。

<?php session_start();
//your code

例外をセッション変数に保存します:

$_SESSION['exceptions']='exceptions Array';

ユーザーがページにアクセスするたびに、それをセッションに追加します。

それに「5」を追加したいとします。

彼女の更新されたコード

<?php session_start();
function randWithout($from, $to) {
global $exceptions;
sort($exceptions); 
$number = rand($from, $to - count($exceptions));
foreach ($exceptions as $exception) {
    if ($number >= $exception) {
        $number++; 
    } else  {
        break;
    }
}

    return $number;
}

if(isset($_SEEION['exceptions'])){
$exceptions =$_SESSION['exceptions'];
}

$random = randWithout(1, $num_rows);
$exceptions[]=$random;
$_SESSION['exceptions']=$exceptions;
于 2012-12-25T19:19:14.447 に答える
0

この一般的な質問は以前に回答されています。一意の乱数のリストを生成する方法を参照してください。。可能な各ページに番号を割り当て、適切な方法を使用して1つを選択します。

于 2012-12-25T20:41:25.750 に答える