1

我面临的问题是,如果出现如下示例的问题,该怎么办:

代码 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 上,因为只有它比其他的有)

=========================================

有人说使用Round Robin,但我以前从未听说过 Round Robin ,也不知道如何使用它,头脑一片空白。有没有另一种更简单的方法,比如使用 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。

我以为我之前给出的简单示例可以很好地理解,但它似乎一团糟,我的错误。

4

1 回答 1

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< N),您选择一个容器来放入项目N[i];选择是通过使用以下表达式完成的:(i mod MiM)。

这个表达式就是你可以称之为循环的,因为它是这样循环的:

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
        )

)
于 2012-06-03T05:05:22.570 回答