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


Not sure why my tree building function is returning an empty array?

我正在使用以下函数获取一个平面数组并从中创建一棵树,但它总是在这组数据上返回一个空数组($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父级的数据,所以应该根据函数忽略它。

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

你的问题不在于代码,而在于你的数据,你没有一个根节点"in_reply_to" = 0

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

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

假设您的activity_id -字段是自动递增 r 否则排序的,那么您可以使用此函数在活动数组中找到最低的 id 并将其用作根。

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