我有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项目等。
我有什么想法可以做到这一点,但仍然允许每个项目的确切数量?
答案 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剩余的数量。您可以只减少“左”中的一个计数,而不是从巨大的数组中随机删除一个元素。
编辑:添加最后两行代码(我怎么忘记这些?)