これはあなたのために働くはずです:
基本的に、すべての文字[A-Z]
の配列 ( ) とすべての数字の配列 ( [0-9]
) があります。次に、使用可能な文字の順序を定義します。たとえば、ここであなたが望むletterNumber
、letterNumber
そして 3 番目のスポットのみnumber
。
この後、必要な組み合わせごとに文字の数だけすべてをループします(例: XXX -> 3 times
)。ループでは、この場所で必要なすべての文字を使用して、既に持っているすべての組み合わせを調べます。
したがって、1回の反復の後、各組み合わせの最初の文字を含む配列が得られます。これは次のようになります[0-9A-Z]
。
次に、2 番目の繰り返しで、既に持っているすべての組み合わせを調べます。ここ[0-9A-Z]
では、2 番目の場所で必要な文字を使用します[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
)
)
Demo