【问题标题】:Randomly order the results of a for loop in PHP在 PHP 中随机排序 for 循环的结果
【发布时间】:2012-03-14 04:11:33
【问题描述】:

我有 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 数据库中。

但诀窍是我希望它们以随机顺序插入,所以我没有前 55,011 个项目都具有相同的名称等。

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

【问题讨论】:

  • 我能问一下你到底为什么要这样做吗?
  • 呵呵。我需要在我的数据库中有一个表,其中包含这些记录来跟踪项目库存。我只运行一次以将数据输入数据库

标签: php mysql random


【解决方案1】:

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

【讨论】:

  • @tereško 完成一次性任务?当然。
【解决方案2】:

我希望你只这样做一次,或者至少不经常这样做,在这种情况下,你可能只想在 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”,它表示 1s、2s、3s 和 4s 还剩下多少。您可以减少“left”中的一个计数,而不是从巨大的数组中随机删除一个元素。

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

【讨论】:

  • 是的,我只做一次将数据导入数据库。
猜你喜欢
  • 1970-01-01
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2018-01-20
  • 2013-02-05
  • 2017-02-07
相关资源
最近更新 更多