【问题标题】:PHP: Controller and View / where to place recursive methodPHP:控制器和视图/放置递归方法的位置
【发布时间】:2012-10-16 06:22:04
【问题描述】:

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

例如:

  1. 1:root:null
  2. 2:标题1:1
  3. 3:标题2:1
  4. 4:subheading1.1:2

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

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

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

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

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

【问题讨论】:

    标签: php view recursion model


    【解决方案1】:

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

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

    【讨论】:

    • 没错!但是,如果我传递这些数据,我将不得不遍历我视图中该数组的所有维度。它必须再次递归?!所以我把工作翻了一番。或者也许你的意思不同。感谢您的回答。
    • 感谢您的回答。生病了你能不能做一个小例子。也更新了我的问题。
    • 当然,您能否提供一个对象示例以及所需输出的示例?
    • 再想一想,这将是一个不同的问题。
    【解决方案2】:

    如果您查看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

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

    【讨论】:

      【解决方案3】:

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

      你可以不用指针递归地创建多维数组。

      // 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']];
      }
      

      【讨论】:

      • 在控制器中处理数据通常是个坏主意。这就是模型存在的原因。
      • 是的,混合模型和控制器 :D 经验教训 早晨咖啡第一堆第二。
      猜你喜欢
      • 2013-01-06
      • 2018-06-13
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多