【问题标题】:Category Hierarchy - check level类别层次结构 - 检查级别
【发布时间】:2012-08-14 21:43:23
【问题描述】:

我使用这个脚本来创建具有层次类别的数组:

$refs = array();
$list = array();

$sql = "SELECT item_id, parent_id, name FROM items ORDER BY name";
$result = mysql_query($sql);
while($data = @mysql_fetch_assoc($result)) {
$thisref = &$refs[ $data['item_id'] ];

$thisref['parent_id'] = $data['parent_id'];
$thisref['name'] = $data['name'];

    if ($data['parent_id'] == 0) {
    $list[ $data['item_id'] ] = &$thisref;
    } else {
    $refs[ $data['parent_id'] ]['children'][ $data['item_id'] ] = &$thisref;
    }
}

如何获取元素数组的级别?这是一个例子:

  1. 猫 A (0 级)
    • 子类 1 (1 级)
      • Sub_Sub_Cat 1 (2 级)
      • Sub_Sub_Cat 2 (2 级)
    • Sub_Cat 2 (1 级)
  2. 猫 B (0 级)
  3. 猫 C (0 级)

这里是来源:

Category Hierarchy (PHP/MySQL)

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您还需要在构建列表时添加它。这基本上是两方面的:

    • 如果一个元素没有父级,则它的级别为0。设置它。
    • 如果元素有父级,则到达父级,选择该级别,添加一个并设置它。

    根据您的数据的排序方式,这可以通过您已有的迭代即时完成,或者您只需首先添加第一轮中没有父节点的数据,然后重新迭代并添加孩子们的水平。

    【讨论】:

      【解决方案2】:

      您可以使用此功能获取所有级别的类别

      function getChildCategories($id=0){
        global $db;
        $res = $db->getAllArray("SELECT item_id, parent_id, name FROM items  parent_id = '$id' ORDER BY name");
        $raws = array();  
        foreach($res as $raw)
        {
         $raws[$raw['id']]['data'] = $raw;
          $subCount = getChildCategories($raw['id']);
         if(count($subCount)>0){
              $raws[$raw['id']]['sub'] =  $subCount;
         }
        }
       return $raws;
      }
      

      猫 A(0 级)
      子类别 1(1 级)
      Sub_Sub_Cat 1(2 级)
      Sub_Sub_Cat 2(2 级)
      Sub_Cat 2(1 级)
      猫 B(0 级)
      猫 C(0 级)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-04
        • 2023-04-03
        • 2015-06-25
        • 1970-01-01
        • 2012-12-17
        • 2011-05-26
        • 2013-10-28
        • 1970-01-01
        相关资源
        最近更新 更多