递归获取树的所有子元素

时间:2019-07-03 09:35:30

标签: php algorithm

我的问题如下: 我想获取一个区域的所有子区域。 每个区域都有定义该区域的代码和一个指向其父区域的父区域。

例如:

我有代码为2058的X区域。我想要该区域的所有子区域 我得到Y的代码= 123,父代= 2058,Z的代码= 500,父代= 2058 现在,我需要Y和Z的所有子区域。我将使用代码[123,500]并重复该过程,直到区域中没有任何子区域。

这是我完成的代码,但是出现一些错误。 顺便说一下,我正在使用PHP框架,但希望您能理解代码。

public function findChild($code)
{
    $result = array();
    $result = $this->db->get_where('zones', array('parent' => $code))->result();
    if(empty($result)) {
        return array();
    } else {
        foreach($result as $zone) {
            $temp = $this->findChild($zone['code']);
            $rr = array_merge($result, $temp);
        }
    }
    return $rr;
}

我做错了什么,解决这个问题的最佳方法是什么?

我得到的结果只是深度= 1的孩子。 因此,如果代码= 2058,那么我只会得到父母= 2058的孩子。

1 个答案:

答案 0 :(得分:0)

问题解决了,这只是一个放错位置的变量。 无论如何,如果有人遇到类似问题,解决方案将与我的方法非常相似。

public function findChild($code)
{
    $result = $this->db->get_where('zones', array('parent' => $code))->result();
    if(empty($result)) {
        return array();
    } else {
        foreach($result as $zone) {
            $temp = $this->findChild($zone->code);
            $result = array_merge($result, $temp);
        }
    }
    return $result;
}

我使用$rr作为数组合并的结果,这实际上是不正确的。我应该合并原始数组。因此,在我之前的代码中,我一直都在合并同一件事。