duancunsu9209 2019-05-14 19:01
浏览 175

树数据上的递归函数来获取路径

I want to write function which receive me path to top element, but I can't figure out how it should work..

My example data:

$data = array(
    3546456 => array(
        5345345,
        12312312,
        56456546,
    ),
    12312312 => array(
        34534534,
        5675675,
        8678678,
    ),
    567978 => array(
        234,
        756756,
        8678678,
    ),
);

//I have function to return parent.
$parents = getParents(8678678); // eg. $object_id = 8678678 - return [12312312, 567978] , $object_id = 12312312 - return [3546456]

// and my recursion function I tried.
function getObjectPath($object_id) {
    if ($object_id == null) {
        return [];
    }

    $parents = getObjectParents($object_id); 

    foreach ($parents as $parent) {
        return array($object_id => getObjectPath($parent->nid));
    }
}

It doesn't work way I need, on the return in getObjectPath(8678678) I'd like to have return array like that:

array(
    3546456 => array(
        12312312 => array(
            8678678
        )
    ),
    567978 => array(
        8678678
    )
);
  • 写回答

1条回答 默认 最新

  • dongxun5349 2019-05-14 19:53
    关注

    I think you almost got it, need to have some other check before returning

    $data = array(
        3546456 => array(
            5345345,
            12312312,
            56456546,
        ),
        12312312 => array(
            34534534,
            5675675,
            8678678,
        ),
        567978 => array(
            234,
            756756,
            8678678,
        ),
    );
    //I have function to return parent.
    $parents = getObjectPath(8678678, $data); // eg. $object_id = 8678678 - return [12312312, 567978] , $object_id = 12312312 - return [3546456]
    echo "<pre>";
    print_r($parents);
    
    // and my recursion function I tried.
    function getParents($object_id, $data) {
        $return = [];
        foreach($data as $key => $value) {
            if(in_array($object_id, $value)) {
                $return[] = $key;
            }
        }
        return $return;
    }
    
    // and my recursion function I tried.
    function getObjectPath($object_id, $data) {
        $return = [];
        $parents = getParents($object_id, $data);
        foreach($parents as $parent) {
            $temp  = getObjectPath($parent, $data);
            if(!empty($temp)) {
                $return[key($temp)][$parent] = $object_id;
            } else {
                $return[$parent] = $object_id;
            }
        }
        return $return;
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题