2014-04-11 58 views
2

我需要創建一些函數,返回一個類別和子類別的數組,其中子類別可以有多個父級。我試圖解決這個問題可能6天,但互聯網上沒有任何東西。如何創建一個分類樹,其中子分類可以有多個父母?

這是我創建的一些代碼,但它不起作用。

private function getAllSubs($category, $index, $parent = null) 
{ 
    $subs = $this->database->table('eshop_product_categoryo') 
    ->where('parent', $category->id); 

    $haveSub = false; 
    foreach($subs as $sub) 
    { 
    $haveSub = true; 
    break; 
    } 

    if($haveSub) 
    { 
    $mainCategory = $this->database->table('eshop_product_categoryo') 
    ->where('category', $category->id); 

    $isMainCategory = true; 
    foreach($mainCategory as $main) 
    { 
    $isMainCategory = false; 
    break; 
    } 

    $ppp = 0; 

    if(!$isMainCategory) 
    { 
    $ppp = $parent; 
    } 

    $this->someArray[] = array 
    (
    'name' => $category->name, 
    'parent' => $ppp, 
    'index' => $index, 
    'id' => $category->id 
    ); 

    foreach($subs as $sub) 
    { 
    $ctgry = $this->database->table('eshop_product_category') 
    ->where('id', $sub->category) 
    ->fetch(); 
    $this->getAllSubs($ctgry, ($index+1), $sub->parent); 
    } 
    } 
} 
+1

所以你可以開始你的數據庫架構的信息?目前您似乎只訪問一個表格,這在嘗試描述多對多關係時會很麻煩。您的問題可能與您的代碼無關,與您的數據模型無關。 –

+0

創建表類別( id int unsigned primary key auto_increment, name varchar(255) ); create table subs( id int unsigned primary key auto_increment, category int unsigned, father int unsigned // category id ); –

+0

@Zdenek,^請將表格定義添加到您的問題中 - 您可以在問題中將其添加格式良好,而在評論中很難使其具有可讀性。另外,如果某些「不起作用」,最好描述你的期望和你得到的東西,否則人們將不得不嘗試以什麼方式工作。 – halfer

回答

0

OK終於解開了...... ;-)這裏幾乎是最後的版本

private function getAllSubs($category, $index) 
{ 
    $subs = $this->database->table('eshop_product_categoryo') 
    ->where('otec', $category->id); 

    $hasSub = false; 
    foreach($subs as $sub){$hasSub = true; break;} 

    if($hasSub) 
    { 
    $this->someArray[] = array 
    (
    'name' => $category->name, 
    'index' => $index 
    ); 
    foreach($subs as $sub) 
    { 
    $parent = $this->database->table('eshop_product_category') 
    ->where('id', $sub->category) 
    ->fetch(); 
    $this->getAllSubs($parent, ($index + 1)); 
    } 
    } 
    else 
    { 
    $this->someArray[] = array 
    (
    'name' => $category->name, 
    'index' => $index 
    ); 
    } 
} 
+0

我確定這個解決方案適用於你,但將來你可能想知道你正在嘗試實現的是一個鏈表,這是一個基本的,非常有用的CS解決方案。 – dops

相關問題