2012-08-14 54 views
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. 猫甲(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)

回答

0

当您构建列表时,您还需要添加它。这基本上是双折:

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

根据您的数据的排序方式,可以通过您已有的迭代进行即时完成,也可以先在第一轮中添加没有父项的项目,迭代并添加子级的级别。

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

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