0

我使用此脚本创建具有层次结构类别的数组:

$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 级)

这是来源:

类别层次结构 (PHP/MySQL)

4

2 回答 2

0

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

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

根据您的数据的排序方式,这可以在您已经拥有的迭代中即时完成,或者您需要首先只添加那些在第一轮中没有父母的人,然后重新迭代并添加级别这些孩子。

于 2012-08-14T21:50:01.270 回答
0

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

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;
}

Cat A(0 级)
    Sub-Cat 1(1 级)
        Sub_Sub_Cat 1(2 级)
        Sub_Sub_Cat 2(2 级)
    Sub_Cat 2(1 级)
Cat B(0 级)
Cat C(0 级)

于 2015-06-02T12:18:21.763 回答