【问题标题】:Php code to display subcategories under categoryphp代码显示类别下的子类别
【发布时间】:2017-06-29 05:29:45
【问题描述】:

我正在从数据库中获取类别和子目录信息,如下所示:

$cols=array("id","name","description","tags","subcat","img");
$result=$conn->get("category",null,$cols);`

请注意,结果是一个多维数组,例如 $result[0]['name'] 将显示类别名称,$result[0]['subcat'] 将分别显示第一个类别和子类别。 以下是 sn-p 的其余部分:

$subcat="Notset";
$cat=array();
$sub=array();
$j=0;
for ($i=0;$i<$conn->count; $i++)
{ 
    if($result[$i]['subcat'] != $subcat)
    {
        $subcat=$result[$i]['subcat'];
        $sub[$j]=$subcat;
        $j++;
    }
$cat[$i]=$result[$i]['name'];
}

但我得到的结果如下: Snapshot of web page

但我想在台式机类别下显示索尼,在笔记本电脑类别下显示 macbook,请帮助。在上图中,红色按钮是类别,绿色是子类别。

【问题讨论】:

  • 我无法理解您的代码。它在做什么?
  • 请将var_dump($result);的结果贴在$result=$conn-&gt;get("category",null,$cols);之后
  • 您只是检查$result[$i]['subcat'] 是否不是Notset。您实际上并没有检查它在 哪个 父级下。

标签: php loops mysqli


【解决方案1】:

我使用以下 php 代码完成此操作:

# categories with a parent id of 0 are parent categories 
$selectparents = $db->prepare("
SELECT category_id, category_name 
FROM categories 
WHERE  parent_category_id = 0 
ORDER BY category_name
"); 

$selectparents->execute();

while($row = $selectparents->fetch(PDO::FETCH_ASSOC)){
        $p_category_id = $row['category_id'];
        $category_name = $row['category_name'];

        echo '<b>'.$category_name.'</b><br>';

            # get sub categories for this parent
            $selectchilds = $db->prepare("
            SELECT category_id, category_name 
            FROM categories 
            WHERE  parent_category_id = ".$p_category_id." 
            ORDER BY category_name
            ");
            $selectchilds->execute();

            while($row = $selectchilds->fetch(PDO::FETCH_ASSOC)){
            $category_id = $row['category_id'];
            $category_name = $row['category_name'];

            echo '<b>'.$category_name.'</b><br>';

            }   
}  

基本上所有父类别的 parent_id 设置为 0,按字母顺序查询,然后在 while 循环中查询每个父类别的子类别,并在父类别下按字母顺序呈现。

【讨论】:

    【解决方案2】:

    您可以使用以下代码:(您需要在示例中设置$fetched_categories = $result。)

    function get_subcategories($array, $category_name){
        $return = array();
    
        foreach ($array as $key => $category){
            if ($category['subcat'] == $category_name){
                $category['sub_categories'] = get_subcategories($array, $category['name']);            
                $return[] = $category;
            }
        }
    
        return $return;
    }
    
    function print_categories($array, $level = 0){
        echo ($level > 0 ? '<ol>' : '<ul>');
    
        foreach ($array as $category){
            echo '<li>' . $category['name'] . '</li>';
            print_categories($category['sub_categories'], ++$level);
        }
    
        echo ($level > 0 ? '</ol>' : '</ul>');
    }
    
    $fetched_categories = array();
    $fetched_categories[] = ['name' => 'Camera', 'subcat' => ''];
    $fetched_categories[] = ['name' => 'Macbook', 'subcat' => 'Laptops'];
    $fetched_categories[] = ['name' => 'Laptops', 'subcat' => ''];
    $fetched_categories[] = ['name' => 'Desktops', 'subcat' => ''];
    $fetched_categories[] = ['name' => 'Sony', 'subcat' => 'Desktops'];
    $fetched_categories[] = ['name' => 'DSLR', 'subcat' => 'Camera'];
    
    $categories = get_subcategories($fetched_categories, '');
    
    print_categories($categories);
    

    这是输出:

    https://eval.in/734955

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      相关资源
      最近更新 更多