這應該爲你工作:
基本上我有所有的字母([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
)
)
Demo
你嘗試過什麼嗎? – Rizier123
那麼,你嘗試了什麼? –
以上編輯我到目前爲止得到的.. – jburley89