Я пытаюсь сгенерировать некоторые номера 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 также могут быть одинаковыми!
Я бы использовал номер продукта, чтобы выбрать два индекса из списка доступных букв. Следующее можно сделать в одной строке, но я его разверну, чтобы объяснить, что он делает.
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";
Это будет работать для небольших значений. У вас возникают коллизии, когда вы превышаете количество уникальных значений, которые вы можете представить своим алфавитом.
Я думаю, что это не очень хорошая концепция, потому что вы будете ограничены во времени этим решением … я имею в виду, что оно не безгранично.
Если вы действительно хотите это сделать, я думаю, что вам нужно создать некий массив со всеми решениями и индексировать его числом, а когда вы создаете новый продукт, просто знайте количество вашего продукта и берите следующий.