这应该为你工作:
基本上我有所有的字母([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