2015-03-13 26 views
1

我正在尝试生成一些SKU编号,并且我遇到了一个让我思考的问题,而当我睡了不到2个小时时,我决定询问你们,Stackoverflowers。iPHP根据编号生成2个字母

比方说,我有一个字母数组,不包括通常错误的字母。

$alphabet = array("A","C","D","E","F","G","H","I","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); 

我想根据一致的数字生成2个字母。假设我有一些子产品,我希望在其SKU的末尾添加后缀。对于第一个子产品,SKU将具有后缀 - AA,第24 - AZ,第25 - CA,第26 - CC等。问题是我们不想有重复的后缀,但AC和CA是可以接受的。

谢谢你做一个需要程序员睡眠的肮脏工作。

说清楚: 我想得到基于刺激的组合。比方说:

$i = 1, then $suffix = AA; 
$i = 2, then $suffix = AC; 
$i = 24, then $suffix = ZZ; 
$i = 25 (one above the count of the array), then $suffix = CA; 
$i = 26, then $suffix = CC; 
$i = 49, then $suffix = DA (**I suppose**) 

比方说,我有子产品,为产品1和子产品,产品2,产品1的子产品的后缀应该是:

AA,AC,AD,AE。 ... AZ,CA,CC,CD .... CZ .... ZA,ZC ... ZY。

产品2的子产品后缀也可以相同!

+1

您的规格尚不清楚。提供一些输入和预期输出的例子。 – 2015-03-13 13:35:45

+0

除非您将它们交叉引用到已创建的后缀,否则无法知道它们是否重复。 – 2015-03-13 13:36:11

+0

假设我有产品1的副产品和产品2的副产品。产品1的副产品后缀应为: AA,AC,AD,AE .... AZ,CA,CC,CD .. .. CZ .... ZA,ZC ... ZY。 产品2的子产品后缀也可以相同! – 2015-03-13 13:38:12

回答

0

我会使用产品编号从可用字母列表中选择两个索引以下操作可以在一行中完成,但我将其展开以便我可以解释它的作用。

function get2letter($num) 
{ 
    $alphabet = array("A","C","D","E","F","G","H","I","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z"); 
    $code = $alphabet[$num%sizeof($alphabet)]; // Get the first letter 
    $num = floor($num/sizeof($alphabet)); // Remove the value used to get the first letter 
    $code.= $alphabet[$num%sizeof($alphabet)]; // Get the second letter 
    return $code; 
} 

for($i=0; $i<10; $i++) 
    print get2letter($i)."\n"; 

这将适用于较小的值。超过可用字母表示的唯一值的数量时发生碰撞。

+0

这是一个很好的例子,除了第二个生成的字符串应该是“AC”,而不是“CA”等等。 – 2015-03-13 14:08:28

+0

我没有意识到你想要他们在一个特定的顺序。在“获取第二个字母”的地方,将其更改为:$ code = $ alphabet [$ num%sizeof($ alphabet)]。$ code; – kainaw 2015-03-13 14:10:49

0

我认为这不是一个好概念,因为在解决这个问题的时候,你会受到限制。我的意思是它不是无限的。

如果你真的想这样做,我认为你必须构建一个包含所有解决方案的数组,并用一个数字索引它,当你创建一个新产品时,只需知道你拥有的产品数量下一个。

+0

我意识到这一点。我们当然不打算拥有比可能的2个字母组合更多的子产品。这个想法是他们的SKU是[ProductSKU] [2Letters] – 2015-03-13 13:52:44