Я должен составить список всех возможных комбинаций цифр и букв длины три. Подвох на первых двух символах может быть буквами или цифрами, а третий может быть только числовым.
Например:
AA1, AA2, AA3 .... FC7 ... 001, 002 ... 365)
Я надеюсь, что вы все можете мне помочь. Я с нетерпением жду этих ответов. С уважением, Джош.
До сих пор мне удался только очень простой способ получить все числа с преобладающими нулями
for ($k = 0 ; $k < 999; $k++) {
$rnd[] = sprintf('%03d',$k);
}
Это должно работать для вас:
В основном у меня есть массив со всеми буквами ([A-Z]
) и массив со всеми числами ([0-9]
). Затем вы определяете, какой порядок возможных символов вы хотите. Например. здесь вы хотите letterNumber
, letterNumber
а потом только третье место number
,
После этого вы перебираете все необходимое количество комбинаций символов (например, XXX -> 3 times
). В цикле вы проходите через все комбинации, которые у вас уже есть, со всеми персонажами, которых вы хотите в этом месте.
Таким образом, после 1 итерации у вас есть массив с первым символом каждой комбинации, который будет: [0-9A-Z]
,
Затем во второй итерации вы проходите все комбинации, которые у вас уже есть, здесь [0-9A-Z]
с персонажами, которых вы хотите на втором месте, здесь [0-9A-Z]
, Так что навсегда символ в массиве комбинаций ([0-9A-Z
]) вы получаете новые комбинации с каждым персонажем [0-9A-Z]
,
И это повторяется снова и снова, пока вы не получите ожидаемую длину комбинации.
Итак, в конце концов вы получите:
letterNumber = 36 = 26 + 10 possible characters ([A-Z0-9])
letter = 26 possible characters ([A-Z])
number = 10 possible characters ([0-9])
36 * 36 * 10 = 12’960 комбинаций
Код:
<?php
$letters = range("A", "Z");
$numbers = array_merge(range(0, 9));
$order = ["letterNumber", "letterNumber", "number"]; //possibilities: "letter", "number", "letterNumber"
$length = count($order);
$combinations = [[]];
for($count = 0; $count < $length; $count++) {
$tmp = [];
if($order[$count] == "number" || $order[$count] == "letterNumber") {
foreach($combinations as $combination) {
foreach($numbers as $v)
$tmp[] = array_merge($combination, [$v]);
}
}
if($order[$count] == "letter" || $order[$count] == "letterNumber") {
foreach($combinations as $combination) {
foreach($letters as $v)
$tmp[] = array_merge($combination, [$v]);
}
}
$combinations = $tmp;
}
print_r($combinations);
?>
выход:
Array
(
[0] => Array
(
[0] => 0
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 0
[1] => 0
[2] => 1
)
//...
[12959] => Array
(
[0] => Z
[1] => Z
[2] => 9
)
)
Следующий код работал отлично для того, что я был после.
$letters = range('A', 'Z');
$comb = array();
for ($k = 0 ; $k <= 9; $k++) {
foreach($letters as $l){
foreach($letters as $le){
$comb[]= $l.$le.$k;
}
}
}
for ($k = 0 ; $k <= 999; $k++) {
$comb[] = sprintf('%03d',$k);
}