Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从MySQL数据库中列出PHP中的类别,然后列出子类别_Php_Mysql_Categories - Fatal编程技术网

从MySQL数据库中列出PHP中的类别,然后列出子类别

从MySQL数据库中列出PHP中的类别,然后列出子类别,php,mysql,categories,Php,Mysql,Categories,我一直在做一个项目,以建立一个简单的电子商务系统,一直很好,直到我开始工作显示类别导航 当我在MySQL中构建类别时,我有如下内容: id name parent_id 1 books null 2 art 1 3 biography 1 4 games null

我一直在做一个项目,以建立一个简单的电子商务系统,一直很好,直到我开始工作显示类别导航

当我在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代码甚至数据库结构


提前感谢。

解决方案并不简单,但可以适用于u:)

$newArray=array();
foreach($arrayFromDatabase as$key=>$category){
//更换钥匙
$newArray[$category['parent_name']][=$category['child1_name'];
}
//开放列表
$toEcho=“
    ”; foreach($newArray作为$name=>$subCat){ 如果(!空($subCat)){ $toEcho_=“
      ”; foreach($subCat作为$cat){ $toEcho.=“
    • $cat
    • ”; } $toEcho_.=“
    ”; $toEcho.=“
  • $name$toEcho
  • ”; }否则{ $toEcho.=“
  • $name
  • ”; } } //关闭列表 echo$toEcho。“
”;
你好,Richard,谢谢你的回答。你说得对,这有点复杂,但它工作得很好,所以非常感谢你。
$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>";