1

我想为文件名生成一个随机的 5 位数字,但有例外。
如果 PHP 将生成例如数字 65,我想设置为 00065(只有 5 位)。
我有一个包含生成器异常的数组:
$uploaded_files= array(00178, 49856, 32183, 02004, 01585);
在数组中是已经存在的文件名,并且数字生成器省略它们非常重要,以避免可能的错误。
谢谢你。

4

2 回答 2

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 回答
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 回答