我有多个包含多个元素的数组,例如:
$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 循环,但如果每次执行算法时“foreaches”的数量都不同,我不知道该怎么办。
非常感谢任何帮助:)
最佳答案
<?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
的第一个元素分配给$result
(所以我们不想再次迭代它们)。 - 我们维护
$temp
来存储临时结果。请注意,我们还使用$result
来存储临时结果,以便我们可以对其进行迭代并获得新的临时结果。 临时,我的意思是构建最终数组。例如:它以1
开头,然后是1_5
,最后是1_5_8
。 - 循环完成后,我们将在
$result
中得到最终答案。
关于php - 生成数组之间元素的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55184154/