PHP-递归数组在单个树结构上合并,显示所有排列
我有一个多维数组中的数据树,如下所示:PHP-递归数组在单个树结构上合并,显示所有排列,php,arrays,algorithm,recursion,array-merge,Php,Arrays,Algorithm,Recursion,Array Merge,我有一个多维数组中的数据树,如下所示: [0] => Array ( [0] => 14 [1] => 12 [2] => Array ( [0] => Array ( [0] => 16 [1] => 13
[0] => Array
(
[0] => 14
[1] => 12
[2] => Array
(
[0] => Array
(
[0] => 16
[1] => 13
)
[1] => Array
(
[0] => 13
)
[2] => Array
(
[0] => 16
)
)
)
[1] => Array
(
[0] => 12
)
…我正试图编写一个算法来输出:
[0] => Array
(
[0] => 14
[1] => 12
[2] => 16
[3] => 13
)
[1] => Array
(
[0] => 14
[1] => 12
[0] => 13
)
[2] => Array
(
[0] => 14
[1] => 12
[0] => 16
)
[3] => Array
(
[0] => 12
)
我能说的最好的方法是递归数组合并,它显示了通过给定数组树的所有路径的所有可能的合并数组排列
我管理过的最接近的是:
[0] => Array
(
[0] => 14
[1] => 12
[2] => 16
[3] => 13
)
[1] => Array
(
[0] => 13
)
[2] => Array
(
[0] => 16
)
[3] => Array
(
[0] => 12
)
输出以下内容的代码:
$return = [];
function enumerateTreePaths($arr, &$return, $path_k = 0)
{
foreach ($arr as $el)
{
if (is_array($el))
{
foreach($el as $i)
{
enumerateTreePaths($i, $return, $path_k++);
}
}
else
{
$return[$path_k][] = $el;
}
}
}
为粗心的命名约定道歉。递归==大脑融化
我显然需要在其中进行某种数组合并,但未能计算出精确的逻辑
谢谢你的意见
哦,那实际上也被包裹在一个口袋里
foreach ($trees as $tree)
{
$return = [];
enumerateTreePaths($tree, $return);
$paths = array_merge($paths, $return);
}
合并时是否忽略重复值?例如,[0][2][0][1][0]=13的值和[0][2][0][1][1]=13的值将始终是三级树,或者可能更深?可能深于3。重复项可以忽略,是的。您正在寻找的是吗?