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

时间:2012-03-14 04:11:33

标签: php mysql random

我有108,002项我正在追踪的项目。

其中55011将被命名为“item1”

32531将被命名为“item2”

其中8060个将被命名为“item3”

其中12400个将被命名为“item4”

我正在使用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数据库。

但诀窍是我希望它们以随机顺序插入,所以我没有所有同名的第一批5511项目等。

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

我希望你只做一次,或者至少不经常这样做,在这种情况下,你可能只想在php中制作一个巨大的数组并随机播放(),就像Amber说的那样。

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

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]

那有道理吗?

编辑:不是拥有包含所有值的数组,而是只有“左”,表示1s,2s,3s和4s剩余的数量。您可以只减少“左”中的一个计数,而不是从巨大的数组中随机删除一个元素。

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