【问题标题】:PHP Create a unique number from 1 to 9 using useridPHP 使用用户 ID 创建一个从 1 到 9 的唯一数字
【发布时间】:2012-04-22 16:44:20
【问题描述】:

为了对日历的每一行进行颜色编码,我希望能够使用字段 userid 创建一个从 1 到 9 的唯一整数。我需要使用日历另一部分的颜色来显示分配给教师的学生。

请记住,用户 ID 可以是任意长度。

起初我想使用最低有效位,但这不适用于用户 ID 01、21、22 等。

然后我想把左边加到右边,例如userID 22 = 2+2=4,但这也不行。

有什么想法可以根据用户 ID 创建一个唯一的 0-9 整数吗?

【问题讨论】:

  • 我可能完全错过了您正在尝试做的事情 - 但用户 ID 不是已经唯一了吗?
  • @BenGriffiths “请记住,用户 ID 可以是任意长度。”用户 ID 1337 不在 1..9 中。
  • 这个问题与图形着色非常相似。但我认为你让它无法解决。如果您有超过 9 个用户,则必须确保在为每个没有第 10 个用户选择唯一颜色后,每个用户都将与前 9 个用户中的任何 8 个一起显示,因为您没有第 10 个颜色给他。
  • @Basti 啊,我看错了,我以为他的意思是他只想要数字,而不是单个数字 :)
  • @Basti 我不介意用户 10、11、12 等是否都具有通用颜色,例如灰色。它与绘图非常相似,我只想为我日历中的前 9 位讲师分配一个独特的(柔和的)颜色。但是我有多个俱乐部,教练的数量各不相同,通常每个大约 4 或 5 个。

标签: php random integer


【解决方案1】:

如果 N 大于 9,任何从 [0..N] 到 [1..9] 的函数映射都会发生冲突,因此不存在唯一映射它们的方案。

在您的情况下,您可以做的只是检查用户 ID,如果您以前没有看到过此用户 ID,则为他们分配下一个免费号码。这是一个简单的 for 循环 + 一个数组。

伪代码:

colors = array()
for userid in userids_to_color:
    if userid not in colors:
        colors[count(colors)] = userid

Colors 是用户 ID 的映射索引(=颜色编号)。如果count(colors) 大于您的最大颜色数,您可以跳出循环。

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2020-01-16
    • 2012-04-26
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多