我有这样的数组输入..
Array
(
[0] => Array
(
[0] => 42
)
[**42**] => Array
(
[0] => 12
[1] => 14
)
[**14**] => Array
(
[0] => 317
)
[317] => Array
(
[0] => 319
)
[**12**] => Array
(
[0] => 306
[1] => 307
)
[307] => Array
(
[0] => 311
)
[306] => Array
(
[0] => 309
)
)
我希望得到像下面这样的结果数组:
$路径[] =阵列(42,12,306,309);
$路径[] =阵列(42,12,307,311);
$路径[] =阵列(42,14,317,319);
请参阅数组输入
并输出数组插入$ paths
$路径[0] =阵列(42,12,306,309);
$路径[1] =阵列(42,12,307,311);
$路径[2] =阵列(42,14,317,319);
答案 0 :(得分:2)
这应该可以解决问题:
function getpaths($arr, $node = 0){
$path = array();
foreach($arr[$node] as $next){
if(isset($arr[$next])){
$p = getpaths($arr, $next);
foreach($p as $q){
$path[] = array_merge(array($next), $q);
}
}else{
$path[] = array($next);
}
}
return $path;
}
调用$path = getpaths($arr);
答案 1 :(得分:0)
这是由Mark E编码,我添加一行代码来解决“致命错误:允许的内存大小为134217728字节耗尽(试图分配24个字节)”
像这样......function getpaths($arr, $node = 0){
$path = array();
foreach($arr[$node] as $next){
if(isset($arr[$next])){
$node = $next;// adding by me
$p = getpaths($arr, $node);
foreach($p as $q){
$path[] = array_merge(array($next), $q);
}
}else{
$path[] = array($next);
}
}
return $path;
}
感谢Mark E