在PHP中对for循环的结果进行随机排序


Randomly order the results of a for loop in PHP

我有108002个项目正在跟踪。

其中55011人将被命名为"item1"

其中32531人将被命名为"项目2"

其中8060人将被命名为"项目3"

其中12400人将被命名为"项目4"

我正在使用for循环来执行此操作。

for ($i = 1; $i <= 108002; $i++) {

if($i <= 55011){
$item = "item1";
}else if($i > 55011 && $i < 87542 ){
$item = "item2";
}else if($i > 87542 && $i < 95602 ){
$item = "item3";
}else if($i > 95602 && $i <= 108002 ){
$item = "item4";
}
}

然后我将每一个插入到MySQL数据库中。

但诀窍是,我希望它们以随机顺序插入,这样我就不会有前55011个名称相同的项目。

有什么想法我可以做到这一点,但仍然允许每个项目的确切数量吗?

将它们放入一个数组并shuffle()

我希望你只做一次,或者至少不经常做,在这种情况下,你可能只想在php中创建一个巨大的数组,并像Amber所说的那样shuffle()。

如果这个数组太大/太慢,你可以做这样的事情(未经测试的伪代码)

left = [0, 55011, 32531, 8060, 12400]
for i in 108001..0
    r = rnd_zero_to_one_less_than(i)
    for j in 1..4
        if r < left[j]
            left[j] -= 1
            insert("item"+j)
            break
        r -= left[j]

这有道理吗?

编辑:不是用一个包含所有值的数组,而是用"left"来表示1、2、3和4还剩多少。您可以减少"left"中的一个计数,而不是从庞大的数组中随机删除一个元素。

编辑:添加了最后两行代码(我怎么会忘记这些?)