Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次调用返回相同值的php随机数函数_Php_For Loop_Random - Fatal编程技术网

每次调用返回相同值的php随机数函数

每次调用返回相同值的php随机数函数,php,for-loop,random,Php,For Loop,Random,我正在尝试生成任意长度的随机数,以生成产品id和订单id。但这里的问题是,当我创建新项目时,给定id的长度11,它将在不更改数字之前生成相同的id使用 这是我的php代码 <?php function EventRang($length = 10, $type){ switch($type){ case 'int': //$keyspace = mt_rand(10000000000, 99999999999).date("Ymd").rand();

我正在尝试生成任意长度的随机数,以生成产品id和订单id。但这里的问题是,当我创建新项目时,给定id的长度
11
,它将在不更改数字之前生成相同的id使用

这是我的php代码

<?php
function EventRang($length = 10, $type){
    switch($type){
        case 'int':
        //$keyspace = mt_rand(10000000000, 99999999999).date("Ymd").rand();
        $keyspace = str_pad(rand(0, pow(10, $length)-1), $length, '0', STR_PAD_LEFT);
        break;
        case 'char':
        $keyspace = date('Fl').'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        break;
        case 'str':
        $keyspace = time().'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        break;
        case 'oid':
        //$keyspace = date("Ymd").time().rand().mt_rand(10000000000, 99999999999);
        $keyspace = date("Ymd").time().str_pad(rand(0, pow(10, $length)-1), $length, '0', STR_PAD_LEFT);
        break;
        default:
        $keyspace = time().'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        break;
    }
    $charactersLength = strlen($keyspace);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $keyspace[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
?>


这始终是输出
2147483647

,因为有时答案需要明确

function EventRang($length = 10, $type = 'int') {
    // Define the set of characters permitted for the random element for each type
    switch($type) {
        case 'int':
        case 'oid':
            $keyspace = '0123456789';
            break;
        case 'char':
            $keyspace = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            break;
        case 'str':
        default:
            $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    }

    // Generate the random characters/digits
    $charactersLength = strlen($keyspace);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $keyspace[rand(0, $charactersLength - 1)];
    }

    // apply the masking
    switch($type) {
        case 'int':
            return $randomString;
        case 'char':
            return date('Fl').$randomString;
            break;
        case 'str':
            return time().$randomString;
            break;
        case 'oid':
            return date("Ymd").time().$randomString;
            break;
        default:
            return time().$randomString;
    }
}
函数EventRang($length=10,$type='int'){
//定义每种类型的随机元素所允许的字符集
交换机($类型){
案例“int”:
案例“oid”:
$keyspace='0123456789';
打破
案例“char”:
$keyspace='abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz';
打破
案例'str':
违约:
$keyspace='0123456789abcdefghijklmnopqrstuvwxyzabefghijklmnopqrstuvwxyz';
}
//生成随机字符/数字
$charactersLength=strlen($keyspace);
$randomString='';
对于($i=0;$i<$length;$i++){
$randomString.=$keyspace[rand(0,$charactersLength-1)];
}
//应用遮罩
交换机($类型){
案例“int”:
返回$randomString;
案例“char”:
返回日期('Fl')。$randomString;
打破
案例'str':
返回时间().$randomString;
打破
案例“oid”:
返回日期(“Ymd”).time().$randomString;
打破
违约:
返回时间().$randomString;
}
}
您需要将掩蔽与键空间分开;keyspace只是用于输出的随机元素的字符集;如果您尝试将遮罩作为键空间的一部分应用,那么您只是扭曲了随机性,而没有应用遮罩


还要注意,函数定义也需要类型的默认值,因为它在参数列表中位于length之后,length有一个默认值

pow(10,11)
超过32位数字
2147483647
是一个您应该学会识别的神奇数字;它是32位的最大有符号整数值PHP@MarkBaker请帮助修复它,我是php新手,现在我所能做的就是不知道这个神奇的数字oid值应该返回哪些字符?您似乎在定义“掩码”而不是“键空间”,即有效字符列表。。。。最好只将键空间设置为有效字符的列表,然后在生成随机字符后执行您可能需要的任何特殊格式value@MarkBaker对于
oid
我想使用当前日期和时间,然后在
日期(“Ymd”)末尾添加随机数。时间()4488765
。请帮助我以正确的方式修复它,我将有时间查看它并了解更多。int现在工作得很好,但其他的返回值超过给定值。我想我知道为什么,因为制作的原因,让我尝试修复它,如果值太长,那么在返回之前将其子串。。。。我不知道你是想要11个随机数字加上掩蔽,还是包括掩蔽,尽管我会说
char
的日期掩蔽很奇怪;而
oid
的值为11不会产生太大的变化,因为
date(“Ymd”).time()
已经大于11