PHP foreach类别和子类别

时间:2016-10-15 19:42:27

标签: php

我正在处理我的项目,该项目具有制作类别和子类别的能力。我在我的数据库中做的是subcategory columncategory_key column的关系

意思是,所有在subcategory column中没有值的记录都被视为类别,其余的都是子类别。

在下图中:

  • ba
  • 的子类别
  • e, g, hd
  • 的子类别

enter image description here

现在我正在使用此代码将其显示在我的页面中:

<?php
    $query = "SELECT * FROM `categories`";
    $result = mysql_query($query);
    while($row = mysql_fetch_array($result)){
        if(empty($row['subcategory'])){
            echo '
                <li class="dd-item dd3-item" id="'.$row['category_key'].'" data-name="'.$row['category_name'].'" data-key="'.$row['category_key'].'">
                    <div class="dd-handle dd3-handle">
                        <i class="fa fa-bars" aria-hidden="true"></i>
                    </div>
                    <div class="dd-edit other-handle edit">
                        <i class="fa fa-pencil" aria-hidden="true"></i>
                    </div>
                    <div class="dd-edit other-handle delete">
                        <i class="fa fa-trash" aria-hidden="true"></i>
                    </div>
                    <div class="dd3-content">'.$row['category_name'].'</div>
                </li>
            '; 
        }else{
            echo '
                <ol class="dd-list">
                    <li class="dd-item dd3-item" id="'.$row['category_key'].'" data-name="'.$row['category_name'].'" data-key="'.$row['category_key'].'">
                        <div class="dd-handle dd3-handle">
                            <i class="fa fa-bars" aria-hidden="true"></i>
                        </div>
                        <div class="dd-edit other-handle edit">
                            <i class="fa fa-pencil" aria-hidden="true"></i>
                        </div>
                        <div class="dd-edit other-handle delete">
                            <i class="fa fa-trash" aria-hidden="true"></i>
                        </div>
                        <div class="dd3-content">'.$row['category_name'].'</div>
                    </li>
                </ol>
            ';
        }
    }
?>

enter image description here

问题是<ol>元素正在重复,因为它必须只有一个,并且它必须位于其类别的父<li>内。

enter image description here

任何帮助?

1 个答案:

答案 0 :(得分:3)

您需要先构建结果数组:

activity

然后你会得到一个像这样的数组:

  function appendChildren($input)
  {
      $output = [];
      foreach($input as $value)
      {
         $key = $value["category_key"];
         if(empty($input["subcategory"]))
         {
             $output[$key] = [];
             $output[$key]["value"] = $value;
             $output[$key]["children"] = [];
         } else {
             $parent_key = $value["subcategory"];
             $output[$parent_key]["children"][] = $value;
         }
      }

      return $output;
  }

现在,开始格式化:

 |-- b
     |-- a
 |
 |-- c
 |-- d
     |-- e
     |-- g
     |-- h
 |
 |-- f