如果出现如下例子的问题,我面临的问题是 :
代码1000,2000,3000,4000,5000
ID 1,2,3
========================================
此:
ID号1的代码为1000,2000,3000,4000
ID号码2的代码为2000,4000,3000
ID号3的代码为3000,4000,5000
========================================
连接所有字段后,每个ID都找到相同的代码。 从上面的例子中,我想产生公平的结果并调整到之前在每个ID上的代码,如下所示:(在ID的集合上产生公平代码)
========================================
成为:
ID号1的代码为1000,2000 (1000必须是1号,因为它只有其他代码)
ID号码2的代码为3000,4000
ID号3的代码为5000 (5000必须是3号,因为它只有其他代码)
========================================
有人说使用 Round Robin ,但之前我从未听过Round Robin,我也不知道如何使用它,这是一个空白的头脑。 还有另一种比较容易使用PHP的方式吗?我输了。
感谢。
=============================================== ==============
解释:
我正在创建一个应用程序,其中每个用户都有一个预定义的代码,并且没有相同的代码。例如,用户A具有1000-1500之间的代码范围,用户B具有1600到2000之间的代码范围。用户C具有1300-1550之间的代码范围。如我们所见,A(A - > 1000-1500,C - > 1300-1550)上的代码中包含的C上的代码的距离肯定会在两个用户之间重复。 在这种情况下,如何分离和分割它使其更公平。设C为1300,A为1301,C为1302等,直到1500。
我认为我之前给出的简单例子可以理解,但这似乎是一团糟,我的错误。
答案 0 :(得分:3)
$codes = array(1000, 2000, 3000, 4000, 5000);
// set up the receiving "containers"
$ids = array(
array(),
array(),
array(),
);
$n_ids = count($ids);
$i = 0;
foreach ($codes as $code) {
// use ($i % $n_ids) to distribute over $n_ids containers
$ids[$i % $n_ids][] = $code;
++$i;
}
print_r($ids);
输出:
Array
(
[0] => Array
(
[0] => 1000
[1] => 4000
)
[1] => Array
(
[0] => 2000
[1] => 5000
)
[2] => Array
(
[0] => 3000
)
)
此问题是一个简单的分发任务:在M个容器上分配N个项目。
对于每个i
(0 <= i
&lt; N
,您选择一个容器来放置项目N[i]
;选择是使用以下表达式完成的:i mod M
(i
modulo M
)。
这个表达式可以称之为循环法,因为它像这样循环:
i : 0 1 2 3 4
i % M: 0 1 2 0 1
array_chunk
函数也执行此任务,但我想您首先要了解该问题。此外,array_chunk
会产生稍微不同的结果。
$ids = array_chunk(array(1000, 2000, 3000, 4000, 5000), round(count($codes) / 3));
输出:
Array
(
[0] => Array
(
[0] => 1000
[1] => 2000
)
[1] => Array
(
[0] => 3000
[1] => 4000
)
[2] => Array
(
[0] => 5000
)
)