1

模型:我有一个像 id:name:parentId 这样的表。parentId 对 id 的引用。构建树的简单递归。

例如:

  1. 1:根:空
  2. 2:航向1:1
  3. 3:航向2:1
  4. 4:副标题1.1:2

在我的控制器中,我现在将调用数据库并将数据传递给视图。如果我这样做,那么我的视图中就会有一个函数。我不喜欢我认为的功能:)。

另一种方法是以某种方式对其进行排序。但这真的会有所作为吗?

  • 为此,我必须使用帮助字段来了解我所处的级别。所以我可以遍历排序数组。
  • 或另一种方法:多维数组。也许毫无意义,因为我不知道那棵树会有多深。

将感谢任何建议。提前致谢。

编辑:我将数据作为对象接收。

4

3 回答 3

2

根据基于 MVC 框架的设计(胖模型、瘦控制器)的趋势,我建议使用您的模型来获取数据并将嵌套数据集(多维数组)传递给控制器​​/视图。不管层次结构有多深,它都是有限的。

由于这个问题问得有点笼统,所以不清楚它是什么类型的数据,也不清楚你是总是需要一次全部数据还是只需要其中的一些相关数据。无论哪种方式,我想你都想保持层次结构,所以如果你不习惯遍历嵌套数组,总是可以选择使用 (Std)Objects。

于 2012-10-16T06:24:58.517 回答
1

如果你看这里,你会看到一个嵌套的树(表)。点击To Array按钮。你会看到一个这样的数组:

    '0' ...
        'item_id' ...
        'parent_id' => "none"
        'depth' => "0"
        'left' => "1"
        'right' => "22"
    '1' ...
        'item_id' => "1"
        'parent_id' ...
        'depth' => "1"
        'left' => "2"
        'right' => "7"

注意left在此处right解释

通过这种方式,您还可以获得深度和树的一部分。

于 2012-10-16T06:47:37.530 回答
0

在模型中构建多维数组并将其传递给视图。

您可以制作多维数组而无需使用指针递归。

// collect tree
$res=$Conn->query('SELECT id, name, parentId FROM tree');

// if your root node has parent 0
$tree[0]->children=array();

// build into one array
// every node is found from its $tree[parentId]->children[id]
// and from $tree[id]
foreach($res as $row)
{
    $tree[$row['id']]->data=$row;

    if(!isset($tree[$row['id']]->children))
        $tree[$row['id']]->children=array();

    $tree[$row['parentId']]->children[$row['id']]=&$tree[$row['id']];
}
于 2012-10-16T06:44:49.917 回答