2012-11-18 116 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