[英]PHP foreach categories and subcategories
我正在與我的項目合作,該項目具有創建類別和子類別的能力。 我在數據庫中所做的是, subcategory column
與category_key column
有關系
意思是,在subcategory column
中沒有值的所有記錄都被視為類別,其余的都是子類別。
在下面的圖片中:
b
是一個子類別a
e, g, h
是d
的子類別 現在,我正在使用此代碼在頁面中顯示它:
<?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.