php - 生成数组之间元素的所有组合
问题描述
我有多个包含多个元素的数组,例如:
$array1 = (1,2)
$array2 = (3,4)
我需要为数组元素生成所有可能的组合。例如,输出应该是:
1_3, 1_4, 2_3, 2_4
但是,问题在于每个数组的数量和元素数量都可能不同。所以我们也可以这样:
$array1 = (1,2,3,4)
$array2 = (5,6,7)
$array3 = (8,9,10,11,12)
和输出应该是这样的:
1_5_8, 1_5_9, 1_5_10 etc. until 4_7_12.
我该如何实现这样的东西?我知道我应该使用 foreach 循环,但我不知道如果每次执行算法时“foreach”的数量都不同该怎么办。
非常感谢任何帮助:)
解决方案
<?php
$array1 = [1,2,3,4];
$array2 = [5,6,7];
$array3 = [8,9,10,11,12];
$collection = [$array1,$array2,$array3];
$result = $collection[0];
array_shift($collection);
foreach($collection as $each_array){
$temp = [];
foreach($result as $each_sub_result){
foreach($each_array as $each_item){
$temp[] = $each_sub_result."_".$each_item;
}
}
$result = $temp;
}
print_r($result);
算法:
- 我们收集
$collection
变量中的所有数组。 - 现在,我们遍历
$collection
变量的所有元素,其中每个单独的项目都是一个数组。 - 我已经完成了array_shift(),因为我们正在分配
$collection
to的第一个元素$result
(所以我们不想再次迭代它们)。 - 我们保持
$temp
存储临时结果。请注意,我们$result
还用于存储临时结果,以便我们可以对其进行迭代并获得新的临时结果。临时,我的意思是构建最终数组。例如:它以 开头1
,1_5
然后是 finally1_5_8
。 - 循环完成后,我们将在
$result
.