我使用以下函数获取一个平面数组并使用它创建一个树,但它总是在这组数据上返回一个空数组($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
的父级数据,因此应根据该功能忽略这些数据。
无论如何,这总是返回一个空数组,我不知道为什么。
答案 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);