簡體   English   中英

PHP foreach類別和子類別

[英]PHP foreach categories and subcategories

我正在與我的項目合作,該項目具有創建類別和子類別的能力。 我在數據庫中所做的是, subcategory columncategory_key column有關系

意思是,在subcategory column中沒有值的所有記錄都被視為類別,其余的都是子類別。

在下面的圖片中:

  • b是一個子類別a
  • e, g, hd的子類別

在此處輸入圖片說明

現在,我正在使用此代碼在頁面中顯示它:

<?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>
            ';
        }
    }
?>

在此處輸入圖片說明

問題是<ol>元素在重復,因為它只能是一個,而且必須在其類別的父<li>內部。

在此處輸入圖片說明

有什么幫助嗎?

您需要首先構造結果數組:

  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

現在,開始格式化:

$input = [];
$query = "SELECT * FROM `categories`";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)){
   $input[] = $row;
}

$result = appendChildren($input);

foreach($result as $row)
{ 
   // open <li> tag
   if(count($row["children"]) > 0)
   {
      foreach($children as $child)
          // add ordered list
   }
   // close <li> tag
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM