How to recursively build a lt;selectgt; with unknown tree depth(如何递归地构建一个 select树深未知)
问题描述
我有一个带有树数据结构的 MySQL 表.字段是 _id
、name
和 parentId
.当记录没有父记录时,parentId
默认为 0.这样我就可以构建一个数组,然后递归打印每条记录.
I have a MySQL table with a tree data structure. The fields are _id
, name
and parentId
. When the record hasn't a parent, parentId
defaults as 0. This way I can build an array and then recursively print each record.
构建的数组如下所示:
Array
(
[1] => Array
(
[parentId] => 0
[name] => Countries
[_id] => 1
[children] => Array
(
[2] => Array
(
[parentId] => 1
[name] => America
[_id] => 2
[children] => Array
(
[3] => Array
(
[parentId] => 2
[name] => Canada
[_id] => 3
[children] => Array
(
[4] => Array
(
[parentId] => 3
[name] => Ottawa
[_id] => 4
)
)
)
)
)
[5] => Array
(
[parentId] => 1
[name] => Asia
[_id] => 5
)
[6] => Array
(
[parentId] => 1
[name] => Europe
[_id] => 6
[children] => Array
(
[7] => Array
(
[parentId] => 6
[name] => Italy
[_id] => 7
)
[11] => Array
(
[parentId] => 6
[name] => Germany
[_id] => 11
)
[12] => Array
(
[parentId] => 6
[name] => France
[_id] => 12
)
)
)
[8] => Array
(
[parentId] => 1
[name] => Oceania
[_id] => 8
)
)
)
)
打印无序列表
使用递归非常简单.这是我使用的函数:
Printing an unordered list <ul>
is very simple with recursion. Here's the function I use:
function toUL ($arr) {
$html = '<ul>' . PHP_EOL;
foreach ( $arr as $v ) {
$html.= '<li>' . $v['name'] . '</li>' . PHP_EOL;
if ( array_key_exists('children', $v) ) {
$html.= toUL($v['children']);
}
}
$html.= '</ul>' . PHP_EOL;
return $html;
}
但我一直坚持以树状结构的方式打印 :
But I'm stuck at printing a <select>
in a tree-structured way:
Countries
-- America
---- Canada
------ Ottawa
-- Asia
-- Europe
---- Italy
---- Germany
---- France
-- Oceania
我想打印 --
与元素深度一样多的次数,但我不知道如何计算深度.
I thought to print --
as many times as the element's depth, but I don't know how to calculate the depth.
我的问题是:是否可以在不知道深度的情况下构建 ?
My question is: is it possible to build a <select>
without knowing the depth?
提前致谢.
推荐答案
像$pass
function toUL ($arr, $pass = 0) {
$html = '<ul>' . PHP_EOL;
foreach ( $arr as $v ) {
$html.= '<li>';
$html .= str_repeat("--", $pass); // use the $pass value to create the --
$html .= $v['name'] . '</li>' . PHP_EOL;
if ( array_key_exists('children', $v) ) {
$html.= toUL($v['children'], $pass+1);
}
}
$html.= '</ul>' . PHP_EOL;
return $html;
}
这篇关于如何递归地构建一个 <select>树深未知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何递归地构建一个 <select>树深未知
基础教程推荐
- 使用 PDO 转义列名 2021-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- HTTP 与 FTP 上传 2021-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- PHP 守护进程/worker 环境 2022-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01