我正在尝试生成一些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,用于第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的子产品'后缀也可以一样!
答案 0 :(得分:0)
我认为这不是一个好的概念,因为你在这个解决方案的时间有限。我的意思是它不是无限的。
如果你真的想这样做,我认为你必须构建一种包含所有解决方案的数组,并用数字索引它,当你创建一个新产品时,只要知道你拥有的产品数量并采取下一个。
答案 1 :(得分: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";
这适用于小值。当您超过可以用字母表示的唯一值的数量时,就会发生碰撞。