获取数组的路径(PHP)

时间:2011-01-17 07:34:24

标签: php

我有这样的数组输入..

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);

请参阅数组输入

  • 数组输入中的root = 42(数组0的索引)
  • 42有孩子= 12,14
  • 12有孩子= 306,307
  • 14有孩子= 317
  • 306有孩子= 309
  • 307有孩子= 311
  • 317有孩子= 319
像这样......

并输出数组插入$ paths

$路径[0] =阵列(42,12,306,309);

$路径[1] =阵列(42,12,307,311);

$路径[2] =阵列(42,14,317,319);

2 个答案:

答案 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