我面临的问题是,如果存在类似以下示例的问题,则以何种方式:
代码 1000, 2000, 3000, 4000, 5000
编号 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 上,因为只有它比其他代码具有)
====
=========================================有人说使用循环赛,但我以前从未听过循环赛,我不知道如何使用它,如此空白的头脑。有没有另一种更简单的方法可以使用PHP?我迷路了。
谢谢。
====
====================================================================解释:
我正在制作一个应用程序,其中每个用户都有一个预定义的代码并且没有相同的代码。例如,用户 A 的代码范围介于 1000-1500 之间,用户 B 的代码范围介于 1600-2000 之间。用户 C 的代码范围介于 1300-1550 之间。如我们所见,A 上的代码中包含的 C 上的代码的距离(A -> 1000-1500,C -> 1300-1550),肯定会在两个用户之间重复。有了这个条件,如何将其分开分割,使其更加公平。设 C 有 1300,A 有 1301,C 有 1302,依此类推,直到 1500。
我以为我之前举的简单例子可以很好地理解,但它似乎是一团糟,我的错误。
$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
这个表达式就是你可以称之为循环的表达式,因为它是这样循环的:
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
)
)