1

我正在尝试生成一些 SKU 编号,但遇到了一个让我思考的问题,当我睡了不到 2 小时时,我决定问你们,Stackoverflowers。

假设我有一个字母数组,不包括常见的错误字母。

$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,对于 24th - AZ、25th - CA、26th - 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的子产品后缀也可以相同!

4

2 回答 2

0

我认为这不是一个好的概念,因为使用此解决方案的时间会受到限制。我的意思是它不是无限的。

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

于 2015-03-13T13:42:23.440 回答
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";

这将适用于小值。当您超过可以用字母表表示的唯一值的数量时,就会发生冲突。

于 2015-03-13T13:43:58.087 回答