php一行一个数组中,从PHP 2D数组的每一行中查找包含一个值的元...
发布日期:2021-06-24 01:39:04 浏览次数:3 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:dux2.0 php,WordPress主题:大前端dux2.0+3.0分享
下一篇:php模拟报税,当税务遇见RPA:一键报税

发表评论

最新留言

不错!
[***.144.177.141]2024年03月28日 10时31分25秒