php - 生成数组之间元素的所有组合

标签 php arrays algorithm

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

$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/

相关文章:

java - Java中查找包含循环的图中一定距离内的所有边

对数据集的一部分进行多项式拟合的算法

php - 在 PHP 中使用 jquery ajax 提交条件表单元素

php - 调用函数时如何省略中间参数的默认值?

java - 有什么理由只为 1 个元素创建一个数组吗?

java - 在 Java 中处理大量数据的有效方法

php - SQL 日期错误,上传单独日期和时间的正确格式是什么?

php - $_FILES[] 在 jQuery 生成的表单中为空

javascript - Javascript 中的“处理”数组元素

algorithm - 使用 O(n) 变换计算 O(nlogn) 中具有正和的连续子数组的数量