如何从较大的整数生成唯一的小整数

How to generate unique small integer from a larger integer

我想从来自 id 的较大整数生成一个介于 1 和 3 之间的唯一小整数。例如:

id: 348593 ----> generated: 2

id: 98762  ----> generated: 3 

id: 12     ----> generated: 1 

我使用两个数字(1 和 2)的模块来做到这一点:

$id = 43784643;
$module = $id % 2; // 0 if even, 1 if odd

$generated = $module + 1;

考虑到同一个 id 的小数字必须始终相同,你会怎么做?

您似乎已经有了一个很好的解决方案:模数。

$generated = ($id % 3) + 1

您的解决方案没有问题,但您需要使用 3 而不是 2

我也会跳过无意义变量的创建,否则我会说这是一个可靠的解决方案。

如果有问题,能否详细说明一下。

$test = array(
        123456789,987654321,2222,111111,
        5555555,63243514513,7,43,222,
        65462,9191910);

foreach($test as $k=>$v) {
    echo '['.$v.'] ['.(($v % 3) +1).']';
}

结果:

[123456789] [1]
[987654321] [1]
[2222] [3]
[111111] [1]
[5555555] [3]
[63243514513] [2]
[7] [2]
[43] [2]
[222] [1]
[65462] [3]
[9191910] [1]