首页 > 解决方案 > 生成数组之间元素的所有组合

问题描述

我有多个包含多个元素的数组,例如:

$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”的数量都不同该怎么办。

非常感谢任何帮助:)

标签: phparraysalgorithm

解决方案


<?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(),因为我们正在分配$collectionto的第一个元素$result(所以我们不想再次迭代它们)。
  • 我们保持$temp存储临时结果。请注意,我们$result还用于存储临时结果,以便我们可以对其进行迭代并获得新的临时结果。临时,我的意思是构建最终数组。例如:它以 开头11_5然后是 finally 1_5_8
  • 循环完成后,我们将在$result.

推荐阅读