PHP:控制器和视图/放置递归方法的位置

PHP:控制器和视图/放置递归方法的位置,php,view,recursion,model,Php,View,Recursion,Model,模型:我有一个类似id:name:parentId的表。parentId引用 简单的递归来建立一个树 例如: 1:root:null 2:头球1:1 3:Heading2:1 第4子目1.1:2 在我的控制器中,我现在调用数据库并传递数据 一直到风景。如果我这样做,那么我就有了一个函数 在我看来。我不喜欢视图中的功能:) 另一种方法是以某种方式对其进行排序。但这真的会有所不同吗 为了做到这一点,我必须使用帮助字段来了解我处于哪个级别。所以我可以迭代排序数组 或者另一种方法:多维数组。也许没有意

模型:我有一个类似id:name:parentId的表。parentId引用 简单的递归来建立一个树

例如:

  • 1:root:null
  • 2:头球1:1
  • 3:Heading2:1
  • 第4子目1.1:2
  • 在我的控制器中,我现在调用数据库并传递数据 一直到风景。如果我这样做,那么我就有了一个函数 在我看来。我不喜欢视图中的功能:)

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

    • 为了做到这一点,我必须使用帮助字段来了解我处于哪个级别。所以我可以迭代排序数组
    • 或者另一种方法:多维数组。也许没有意义,因为我不知道那棵树会有多深
    如有任何建议,我将不胜感激。 提前谢谢


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

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


    这个问题问得有点宽泛,不清楚它是什么类型的数据,也不清楚您是否总是需要一次完整的数据或只是其中的某个相对部分。无论哪种方式,我都认为您希望保留层次结构,因此如果您不喜欢在嵌套数组中迭代,则始终可以选择使用(Std)对象。

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

    您可以创建多维数组,而无需使用指针进行递归

    // 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']];
    }
    
    如果你看,你会看到一个嵌套的树(表)。单击要排列的
    按钮。您将看到这样一个数组:

        '0' ...
            'item_id' ...
            'parent_id' => "none"
            'depth' => "0"
            'left' => "1"
            'right' => "22"
        '1' ...
            'item_id' => "1"
            'parent_id' ...
            'depth' => "1"
            'left' => "2"
            'right' => "7"
    
    请注意已解释的
    左侧
    右侧


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

    没错!但如果我传递这些数据,我将不得不遍历视图中该数组的所有维度。它一定又是递归的?!所以我加倍努力。或者你的意思不同。谢谢你的回答。谢谢你的回答。我可以给你举个小例子。也更新了我的问题。当然,你能提供一个对象的示例以及所需输出的示例吗?再想想,这将是一个不同的问题。在控制器中处理数据通常是一个坏主意。这就是为什么会有模型。是的,混合模型和控制器:D课早上的咖啡第一堆第二堆。