不知道为什么我的树构建函数返回一个空数组?

时间:2015-04-03 13:41:50

标签: php arrays

我使用以下函数获取一个平面数组并使用它创建一个树,但它总是在这组数据上返回一个空数组($branch = array())。

 public static function buildTree($activities, $parent = 0)
    {
        $branch = array();

        foreach ($activities as $activity) {
            if ($activity['in_reply_to'] == $parent) {
                $children = self::buildTree($activities, $activity['activity_id']);

                if ($children) {
                    $activity['children'] = $children;
                }

                $branch[] = $activity;
            }
        }

        return $branch;
    }

这是数据集。

Array
(
    [0] => Array
        (
            [activity_id] => 583069095760826322
            [in_reply_to] => 583068167603269635
        )

    [1] => Array
        (
            [activity_id] => 583068167603269635
            [in_reply_to] => 582781728499965991
        )

)

in_reply_to引用activity_id

因此,您可以看到0实际上是1的孩子。

我们没有1的父级数据,因此应根据该功能忽略这些数据。

无论如何,这总是返回一个空数组,我不知道为什么。

2 个答案:

答案 0 :(得分:0)

您的问题不在代码上,而是在您的数据上,您没有"in_reply_to" = 0

的根节点

尝试使用此数据集执行代码:

$activities = array(
    array("activity_id" => 583069095760826322, "in_reply_to" => 583068167603269635), 
    array("activity_id" => 583068167603269635, "in_reply_to" => 0)
);

答案 1 :(得分:0)

假设你的activity_id - 字段是自动递增r否则命令,那么你可以使用这个函数在activity-array中找到最低的id并将它用作root。

public static function findLowestActivityID($activities)
{
    $id = null;
    foreach ($activities as $activity) {
        if ($id === null || $id > $activity['activity_id']) {
            $id = $activity['activity_id'];
        }
    }
    return $id;
}

实施例呼叫:

$rootID = YourClassName::findLowestActivityID($activities);
$result = YourClassName::buildTree($activities, $rootID);