PHP使用userid创建一个从1到9的唯一数字

PHP使用userid创建一个从1到9的唯一数字,php,random,integer,Php,Random,Integer,为了对日历的每一行进行颜色编码,我希望能够使用userid字段创建一个从1到9的唯一整数。我需要使用日历另一部分的颜色来显示分配给讲师的学生 请记住,userID可以是任意长度 起初,我考虑使用最低有效数字,但这对用户ID01、21、22等不起作用 然后我考虑将左边添加到右边,例如userid22=2+2=4,但这也不起作用 任何关于如何根据用户ID创建唯一的0-9整数的想法?如果N大于9,则将[0..N]映射到[1..9]的任何函数都会发生冲突,因此不存在唯一映射它们的方案 在您的案例中,您可

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

请记住,userID可以是任意长度

起初,我考虑使用最低有效数字,但这对用户ID01、21、22等不起作用

然后我考虑将左边添加到右边,例如userid22=2+2=4,但这也不起作用


任何关于如何根据用户ID创建唯一的0-9整数的想法?

如果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是到userid的映射索引(=颜色编号)。如果计数(颜色)大于最大颜色数,则可以中断循环。

如果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是到userid的映射索引(=颜色编号)。如果
count(colors)
大于您的最大颜色数,您可以打破循环。

我可能完全不知道您想做什么-但用户ID不是已经唯一了吗?@bengrifiths“请记住,用户ID可以是任意长度。”用户Id
1337
不在
1..9
中。此问题与图形着色非常类似。但我认为是你让它无法解决。如果你有9个以上的用户,你必须确保在为每个第10个用户选择唯一的颜色后,每个用户都将与前9个用户中的任何8个一起显示,因为你没有第10个用户。@Basti-Ah我误读了,我想他指的是他只想要数字,而不是单个数字:)@Basti我不介意用户10,11,12等都有通用颜色,如灰色。这与绘图非常相似,我只想为日历中的前9位讲师指定一种独特的(粉彩)颜色。但我有多个俱乐部,每个俱乐部有不同数量的讲师,通常大约4或5名。我可能完全不知道你在做什么-但用户ID不是已经唯一了吗?@Bengrifiths“请记住,用户ID可以是任意长度的。”用户ID
1337
不在
1..9
中。这个问题与图形着色非常类似。但我认为是你让它无法解决。如果你有9个以上的用户,你必须确保在为每个第10个用户选择唯一的颜色后,每个用户都将与前9个用户中的任何8个一起显示,因为你没有第10个用户。@Basti-Ah我误读了,我想他指的是他只想要数字,而不是单个数字:)@Basti我不介意用户10,11,12等都有通用颜色,如灰色。这与绘图非常相似,我只想为日历中的前9位讲师指定一种独特的(粉彩)颜色。但我有多个俱乐部,有不同数量的教练,通常每个大约4或5名。