【问题标题】:Php random fill rangephp随机填充范围
【发布时间】:2015-10-19 10:40:07
【问题描述】:

我有这个:

$numbers = range(1,52);
shuffle($numbers);

foreach($users as $user) {

    $uniqueRand = array_pop($numbers);

}

这会给我数据库中的每个用户一个唯一的随机数。

我总共有 15 个用户,是否有可能以某种方式填充 1-32 的其余范围并重复随机化。

现在看起来像这样:

1   -  24
2   -  26
3   -  2
4   -  6
5   -  8
6   -  31
7   -  25
8   -  16
9   -  13
10  -  21
11  -  19
12  -  29
13  -  8
14  -  4
15  -  6

只有随机数的用户,是否有可能将那些没有分配给范围内的用户的数字再次随机分配给用户,直到给定范围内的所有数字?

【问题讨论】:

    标签: php sql random foreach


    【解决方案1】:
    <?php
    
    function f($userIds, $numbers)
    {
        shuffle($numbers); // added
        $picks = array();
    
        foreach ($userIds as $id) {
            $picks[] = array('id' => $id, 'numbers' => array());
        }
    
        // Shuffle order of userIds. Give one number to each user. Repeat both steps
        // until all numbers are gone
        $n = count($userIds);
        $i = 0;
        while (!empty($numbers)) {
            if ($i % $n === 0) {
                shuffle($picks);
            }
            $picks[$i % $n]['numbers'][] = array_pop($numbers);
            $i++;
        }
    
        return $picks;
    }
    
    $picks = f(array(1, 2, 3, 4, 9, 12, 47, 50), range(1, 30));
    
    foreach ($picks as $p) {
        printf("id %s: %s\n", $p['id'], implode(', ', $p['numbers']));
    }
    

    会输出如下内容:

    id 47: 28, 22, 8, 6
    id 1: 30, 17, 12, 5
    id 12: 24, 16, 7, 4
    id 9: 23, 19, 13, 3
    id 50: 25, 18, 14, 2
    id 3: 27, 15, 9, 1
    id 4: 29, 20, 10
    id 2: 26, 21, 11
    

    编辑:忘记了什么。您可能还想 shuffle() 数字,以获得更随机的分布。在函数中添加了这一行。

    【讨论】:

    • ty 我会尽快试试这个
    猜你喜欢
    • 1970-01-01
    • 2016-07-01
    • 2021-06-20
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多