我正在使用以下函数获取一个平面数组并从中创建一棵树,但它总是在这组数据上返回一个空数组($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);