我想使用多数组生成组合,如果我有固定的数组设置,但是在多数组foreach
没有帮助的情况下,例如:
$first_array = [1,2,3];
$second_array = [1];
我想要这样的输出,总共 3个组合:
First Combination : 11
Second Combination : 21
Third Combination : 31
如果我在第二个数组中有另一个数组值,如下所示:
$second_array = [1,2];
然后输出将是这样,总共 6个组合:
// My Solution
$i = 1;
foreach ($first_array as $o) {
foreach ($second_array as $s) {
echo $i . ' : ' . $o . $s;
echo "<br/>";
$i++;
}
}
1 : 11
2 : 12
3 : 21
4 : 22
5 : 31
6 : 32
我可以使用foreach
来解决这个问题,但是如果我有多个数组,例如还有第三个数组:
$third_array = [1,2,3];
然后输出将是这样,总共 18个组合:
// My Solution
$i = 1;
foreach ($first_array as $o) {
foreach ($second_array as $s) {
foreach ($third_array as $t) {
echo $i . ' : ' . $o . $s . $t;
echo "<br/>";
$i++;
}
}
}
1 : 111
2 : 112
3 : 113
4 : 121
5 : 122
6 : 123
7 : 211
8 : 212
9 : 213
10 : 221
11 : 222
12 : 223
13 : 311
14 : 312
15 : 313
16 : 321
17 : 322
18 : 323
有没有最简单的解决方案,而无需多个foreach
?
因为如果还有另一个像下面这样的数组集:
[1,2,3]
[1,2]
[1,2,3]
[1,2,3,4]
[1,2,3,4,5,6]
答案 0 :(得分:4)
您不必为每个级别添加foreach
。任何数量的组件都可以使用三个foreach
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]
]));