1

ファイル名にランダムな 5 桁の数字を生成したいのですが、例外があります。
たとえば、PHP が 65 という数字を生成する場合、00065 (5 桁のみ) に設定したいと考えています。
ジェネレーターの例外を含む
$uploaded_files= array(00178, 49856, 32183, 02004, 01585);
配列があります。配列には既に存在するファイル名があり、番号ジェネレーターはエラーを回避するためにそれらを省略することが非常に重要です。
ありがとうございました。

4

2 に答える 2

0

車輪を再発明しないことを考慮してください。特に、何らかの方法で車輪があなたの言語で利用できる場合はそうです。そうは言っても:

/**
 * Get random number outside an exception list
 *
 * @param array $exception Exception list
 */
function getRandom($exception=array('00001', '00002', '00003', '00004', '00005')) {
    $rand=str_pad(mt_rand(0,10),5,0,STR_PAD_LEFT);
    if(in_array($rand,$exception))return getRandom($exception);
    return $rand;
}

var_dump(
    getRandom(),
    getRandom(),
    getRandom(),
    getRandom(),
    getRandom(),
    getRandom()
);

この種の実装は、特に例外リストが大きくなる場合に、衝突が非常に高速になると非常に高価になる可能性があることに注意してください。

于 2013-02-11T12:40:23.983 に答える
0

これを試して:

//create a rand_value initially
while(in_array($rand_value, $uploaded_files) {
    $rand_value = rand(0, 99999);
    $rand_value = sprintf("%05s", $rand_value);
}
于 2013-02-11T12:00:31.360 に答える