2012-11-18 41 views
2

我一直在建立一個項目,建立一個簡單的電子商務系統,一直很好,直到我開始工作顯示類別的導航。上市類別然後從PHP數據庫中的子類別

當我在MySQL建立類別我有類似:

id    name    parent_id 
1    books   null 
2    art    1 
3    biography  1 
4    games   null 
5    electronics  null 
6    FPS    4 

我寫了下面的SQL來檢索父類則子類:

SELECT parent.name AS parent_name, child1.name AS child1_name 
FROM categories AS parent 
LEFT OUTER JOIN categories AS child1 ON child1.parent_id = parent.id 
WHERE parent.parent_id IS NULL 
ORDER BY parent_name, child1_name 

的結果這是一個包含多個陣列的陣列:

Array 
(
    [0] => Array 
    (
     [parent_name] => Books 
     [child1_name] => Art 
    ) 

    [1] => Array 
    (
     [parent_name] => Books 
     [child1_name] => Biography 
    ) 

    [2] => Array 
    (
     [parent_name] => Clothes, Shoes & Watches 
     [child1_name] => 
    ) 

    [3] => Array 
    (
     [parent_name] => Computers & Office 
     [child1_name] => 
    ) 

    [4] => Array 
    (
     [parent_name] => Electronics 
     [child1_name] => 
    ) 
) 

我有問題將這些信息顯示爲無序列表。預期的效果是這樣的:

<ul> 
    <li>Books 
     <ul> 
      <li>Art</li> 
      <li>Biography</li> 
     </ul> 
    </li> 
    <li>Computers</li> 
    <li>Electronics</li> 
</ul> 

有沒有人有這個問題的解決方案?我是否需要更改我的MySQL代碼甚至是數據庫結構?

在此先感謝。

回答

3

解決方案並不簡單,但可以爲你工作:)。

$newArray = array(); 
foreach($arrayFromDatabase as $key => $category){ 
    //replace key 
    $newArray[$category['parent_name']][] = $category['child1_name']; 
} 

//Open list 
$toEcho = "<ul>"; 
foreach($newArray as $name => $subCat){ 
    if(!empty($subCat)){ 
    $toEcho_ = "<ul>"; 
    foreach($subCat as $cat){ 
     $toEcho_ .= "<li>$cat</li>"; 
    } 
    $toEcho_ .= "</ul>"; 
    $toEcho .= "<li>$name $toEcho_</li>"; 
    } else{ 
     $toEcho .= "<li>$name</li>"; 
    } 
} 

//Close list 
echo $toEcho . "</ul>"; 
+0

嗨,理查德,謝謝你的回答。你是對的,這有點複雜,但它工作正常,所以非常感謝你。 – xonorageous