Php 算法-在多个数组中均匀分布项目(如果有n个项目<;n个数组)

Php 算法-在多个数组中均匀分布项目(如果有n个项目<;n个数组),php,arrays,algorithm,function,math,Php,Arrays,Algorithm,Function,Math,我需要一种在多个数组中分配项目的算法。如果这对任何人都有帮助的话,我正在用PHP编写代码。标准是,如果项目数小于数组数,我希望平均跳过数组。为了帮助您更好地理解我在寻找什么,请查看我的示例问题: 示例: 考虑有50个列表。我有20个项目要分发到这50个列表中。由于只有20个项目,一些列表将丢失。什么样的算法或我可以做些什么来平均分配项目,避免像前20个列表中的项目和后30个列表中的项目都没有得到一样的事情 编辑: 好的,目标是一些列表不接收项目。 因此,只有20个列表将接收项目 示例:有8个列表

我需要一种在多个数组中分配项目的算法。如果这对任何人都有帮助的话,我正在用PHP编写代码。标准是,如果项目数小于数组数,我希望平均跳过数组。为了帮助您更好地理解我在寻找什么,请查看我的示例问题:

示例:

考虑有50个列表。我有20个项目要分发到这50个列表中。由于只有20个项目,一些列表将丢失。什么样的算法或我可以做些什么来平均分配项目,避免像前20个列表中的项目和后30个列表中的项目都没有得到一样的事情

编辑:

好的,目标是一些列表不接收项目。 因此,只有20个列表将接收项目

示例:有8个列表,但只有2个项目。我希望清单3和6收到一个项目,然后这个过程将完成

提前谢谢。

在每个列表中放置
项(#项/#列表)


然后,对于剩余的项目,在每个
楼层(#lists/(#items%#lists))
从数组中的某个随机索引开始,然后按数组长度+1个数组模长度递增:

function distribute_evenly(lists, items)
  last_index = random(length(lists))

  while length(items) > 0 do
    last_index <- mod(last_index + length(lists) + 1, length(lists))
    push(nth(lists, last_index), pop(items))
函数均匀分布(列表、项目)
最后索引=随机(长度(列表))
而长度(项目)>0则

最后一个索引描述了您认为应该“均匀分布”的内容。如果你有50个列表,只有20个项目,并且每个项目都不能被分割,那么结果必须是30个空列表,20个列表每个都有1个项目。你的作业有问题吗?这只需要一些基础的小学数学来计算项目应该如何分配,以及一个简单的循环来将项目放入正确的数组中。你到底不明白什么?斯文说的。“前20个”列表获得项目意味着什么?如果您希望结果“看起来随机”,请将这20项放在前20个列表中,然后洗牌列表。问题解决了。