2012-08-14 55 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級)