[英]Nested Categories Table HTML
Short story i want to create an table with 3 lvl categories: category, subcategory, subsubcategory.短篇小说我想创建一个包含 3 个 lvl 类别的表:类别、子类别、子子类别。 This is the output from the database, i only need implementation on the php/html part with the following:
这是数据库的输出,我只需要在 php/html 部分实现以下内容:
Array
(
[1] => Array
(
[category_id] => 2
[0] => 2
[category_name] => Tutorials
[1] => Tutorials
[category_link] => #
[2] => #
[parent_id] => 0
[3] => 0
[sort_order] => 1
[4] => 1
[subcategories] => Array
(
[0] => Array
(
[category_id] => 3
[0] => 3
[category_name] => Java
[1] => Java
[category_link] => java
[2] => java
[parent_id] => 2
[3] => 2
[sort_order] => 1
[4] => 1
[subcategories] => Array
(
[0] => Array
(
[category_id] => 18
[0] => 18
[category_name] => Jquery Tut
[1] => Jquery Tut
[category_link] => jquerytut
[2] => jquerytut
[parent_id] => 3
[3] => 3
[sort_order] => 3
[4] => 3
[subcategories] => Array
(
)
)
)
)
)
)
[2] => Array
(
[category_id] => 5
[0] => 5
[category_name] => Frameworks
[1] => Frameworks
[category_link] => #
[2] => #
[parent_id] => 0
[3] => 0
[sort_order] => 2
[4] => 2
[subcategories] => Array
(
[0] => Array
(
[category_id] => 9
[0] => 9
[category_name] => Hibernate
[1] => Hibernate
[category_link] => hibernate
[2] => hibernate
[parent_id] => 5
[3] => 5
[sort_order] => 2
[4] => 2
[subcategories] => Array
(
)
)
)
)
[4] => Array
(
[category_id] => 13
[0] => 13
[category_name] => Contact
[1] => Contact
[category_link] => contact
[2] => contact
[parent_id] => 0
[3] => 0
[sort_order] => 4
[4] => 4
[subcategories] => Array
(
)
)
)
Something like this像这样的东西
|CategoryName | Link | more |
|-- SubcategoryName | Link | more |
|--- SubSubcategoryName | Link | more |
etc等等
I've been struggling with this for a few hours now and seems like i can't get it done.我已经为此苦苦挣扎了几个小时,似乎我无法完成。
I tried something but the output is this我尝试了一些东西,但输出是这样的
Code:代码:
foreach ($category as $array => $innerArray):
$table .= "<tr><td>".$innerArray['category_name'];
foreach ($innerArray['subcategories'] as $subc => $subc_array):
$table .= $subc_array['category_name'];
endforeach;
$table .= "</td></tr>";
endforeach;
echo $table;
A good solution would be a recursive function.一个好的解决方案是递归函数。 For example:
例如:
echo "<table>".get_rows($category, 0)."</table>";
function get_rows($arr, $lvl){
$html = '';
foreach ($arr as $array => $innerArray){
$html .= '<tr><td style="padding-left:'.($lvl*30).'px;">'.$innerArray['category_name'].'</td>';
$html .= '<td>'.$innerArray['category_link'].'</td></tr>';
if(isset($innerArray['subcategories'])){
$html .= get_rows($innerArray['subcategories'], $lvl+1);
}
}
return $html;
}
Output:输出:
cat1 clink
cat11 clink
cat12 clink
cat2 clink
cat21 clink
cat211 clink
cat212 clink
cat2121 clink
cat22 clink
cat3 clink
cat31 clink
cat32 clink
This is the input I used:这是我使用的输入:
$category = [
[
"category_name"=>"cat1",
"category_link"=>"c1link",
"subcategories"=> [
[
"category_name"=>"cat11",
"category_link"=>"c1link",
"subcategories"=>[]
],
[
"category_name"=>"cat12",
"category_link"=>"c1link",
"subcategories"=>[]
]
],
],
[
"category_name"=>"cat2",
"category_link"=>"c1link",
"subcategories"=> [
[
"category_name"=>"cat21",
"category_link"=>"c1link",
"subcategories"=>[[
"category_name"=>"cat211",
"category_link"=>"c1link",
"subcategories"=>[]
],
[
"category_name"=>"cat212",
"category_link"=>"c1link",
"subcategories"=>[[
"category_name"=>"cat2121",
"category_link"=>"c1link",
"subcategories"=>[]
]]
]]
],
[
"category_name"=>"cat22",
"category_link"=>"c1link",
"subcategories"=>[]
]
]
],
[
"category_name"=>"cat3",
"category_link"=>"c1link",
"subcategories"=> [
[
"category_name"=>"cat31",
"category_link"=>"c1link",
"subcategories"=>[]
],
[
"category_name"=>"cat32",
"category_link"=>"c1link",
"subcategories"=>[]
]
]
]
];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.