你不必加
foreach
每一个级别。对于任何数量的组件,三个foreaches都可以。
function array_permute($arrays) {
$set = array_shift($arrays);
foreach($arrays as $sub) {
$newSet = [];
foreach($set as $prefix) {
foreach($sub as $suffix){
$newSet[] = $prefix.$suffix;
}
}
$set = $newSet;
}
return $set;
}
用法
print_r(array_permute([
[1,2,3],
[1,2],
[1,2,3]
]));
会导致
Array
(
[0] => 111
[1] => 112
[2] => 113
[3] => 121
[4] => 122
[5] => 123
[6] => 211
[7] => 212
[8] => 213
[9] => 221
[10] => 222
[11] => 223
[12] => 311
[13] => 312
[14] => 313
[15] => 321
[16] => 322
[17] => 323
)
使用更多组件
print_r(array_permute([
[1,2,3],
[1,2],
[1,2,3],
[1,2,3,4],
[1,2,3,4,5,6]
]));