PHP:Controller和View /放置递归方法的位置

时间:2012-10-16 06:22:04

标签: php view recursion model

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

例如:

  1. 1:root:null
  2. 2:标题1:1
  3. 3:Heading2:1
  4. 4:subheading1.1:2
  5. 在我的控制器中,我现在调用数据库并传递数据     通过观点。如果我这样做,那么我会有一个功能     在我看来。我不喜欢我的观点中的功能:)。

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

    • 为了做到这一点,我将不得不使用帮助字段来了解我所处的级别。所以我可以迭代排序的数组。
    • 或其他方法:多维数组。也许毫无意义,因为我不知道这棵树会有多深。

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

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

3 个答案:

答案 0 :(得分:2)

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

由于问题有点广泛,不清楚它是什么类型的数据,无论你是一直需要整个数据还是只需要一些相对的数据块。无论哪种方式,我想你都希望保持层次结构,所以如果你不习惯迭代嵌套数组,那么总是可以选择使用(Std)对象。

答案 1 :(得分:1)

如果查看here,您会看到一个嵌套树(表)。单击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"

请注意leftright解释here

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

答案 2 :(得分: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']];
}