本文共 2491 字,大约阅读时间需要 8 分钟。
给定数组中行和列的数目未知,获得所需结果的最佳方法是使用递归(否则,您将必须编写任意数量的嵌套循环).此函数遍历数组中的每一行,并返回以下两个结果之一:
>如果我们在数组的最后一行,则返回该行;
>否则,返回当前行与数组平衡结果之间的叉积(使用两个嵌套的foreach循环).我们使用array_shift来获取当前行,并将其从数组中删除.
这是代码:
function find_paths($array) {
if (count($array) == 1) return $array[0];
$output = array();
foreach (array_shift($array) as $v1) {
foreach (find_paths($array) as $v2) {
$output[] = array_merge(array($v1), is_array($v2) ? $v2 : array($v2));
}
}
return $output;
}
使用示例数据:
$a = Array( Array(1,2,3),
Array(4,5,6),
Array(7,8,9) );
$combinations = find_paths($a);
该函数执行以下一系列操作:
>将第1行(1、2、3)的叉积与数组剩余部分的函数输出((4、5、6),(7、8、9))相乘;
>第一次递归:将第2行(4、5、6)的叉积与该数组的余量的函数输出((7、8、9))相乘;
>第二次递归:至此,数组中只剩下一行(7、8、9),因此我们将其返回;
>第一次递归:计算(4,5,6)与(7,8,9)=((4,7),(4,8),(4,9),(5,7), (5,8),(5,9),(6,7),(6,8),(6,9))并返回;
>取(1、2、3)与((4、7),(4、8),(4、9),(5、7),(5、8),(5、9)的叉积,(6,7),(6,8),(6,9))并返回该值.
提供以下输出:
Array (
[0] => Array ( [0] => 1 [1] => 4 [2] => 7 )
[1] => Array ( [0] => 1 [1] => 4 [2] => 8 )
[2] => Array ( [0] => 1 [1] => 4 [2] => 9 )
[3] => Array ( [0] => 1 [1] => 5 [2] => 7 )
[4] => Array ( [0] => 1 [1] => 5 [2] => 8 )
[5] => Array ( [0] => 1 [1] => 5 [2] => 9 )
[6] => Array ( [0] => 1 [1] => 6 [2] => 7 )
[7] => Array ( [0] => 1 [1] => 6 [2] => 8 )
[8] => Array ( [0] => 1 [1] => 6 [2] => 9 )
[9] => Array ( [0] => 2 [1] => 4 [2] => 7 )
[10] => Array ( [0] => 2 [1] => 4 [2] => 8 )
[11] => Array ( [0] => 2 [1] => 4 [2] => 9 )
[12] => Array ( [0] => 2 [1] => 5 [2] => 7 )
[13] => Array ( [0] => 2 [1] => 5 [2] => 8 )
[14] => Array ( [0] => 2 [1] => 5 [2] => 9 )
[15] => Array ( [0] => 2 [1] => 6 [2] => 7 )
[16] => Array ( [0] => 2 [1] => 6 [2] => 8 )
[17] => Array ( [0] => 2 [1] => 6 [2] => 9 )
[18] => Array ( [0] => 3 [1] => 4 [2] => 7 )
[19] => Array ( [0] => 3 [1] => 4 [2] => 8 )
[20] => Array ( [0] => 3 [1] => 4 [2] => 9 )
[21] => Array ( [0] => 3 [1] => 5 [2] => 7 )
[22] => Array ( [0] => 3 [1] => 5 [2] => 8 )
[23] => Array ( [0] => 3 [1] => 5 [2] => 9 )
[24] => Array ( [0] => 3 [1] => 6 [2] => 7 )
[25] => Array ( [0] => 3 [1] => 6 [2] => 8 )
[26] => Array ( [0] => 3 [1] => 6 [2] => 9 )
)
如果然后要获取总和,则可以在数组上简单地使用array_map,调用array_sum以获取每个元素的总和:
$sums = array_map(function ($v) { return array_sum($v);}, $combinations);
输出:
Array (
[0] => 12
[1] => 13
[2] => 14
[3] => 13
[4] => 14
[5] => 15
[6] => 14
[7] => 15
[8] => 16
[9] => 13
[10] => 14
[11] => 15
[12] => 14
[13] => 15
[14] => 16
[15] => 15
[16] => 16
[17] => 17
[18] => 14
[19] => 15
[20] => 16
[21] => 15
[22] => 16
[23] => 17
[24] => 16
[25] => 17
[26] => 18
)
转载地址:https://blog.csdn.net/weixin_29306261/article/details/115986460 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!