Sim*_*one 5 php tree recursion
我有一个带有树数据结构的MySQL表.这些字段是_id,name和parentId.当记录没有父级时,parentId默认为0.这样我就可以构建一个数组,然后递归打印每条记录.
构建的数组如下所示:
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
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
<ul>使用递归打印无序列表非常简单.这是我使用的功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
但我坚持以<select>树形结构方式打印:
Countries
-- America
---- Canada
------ Ottawa
-- Asia
-- Europe
---- Italy
---- Germany
---- France
-- Oceania
Run Code Online (Sandbox Code Playgroud)
我想打印的--次数与元素的深度一样多,但我不知道如何计算深度.
我的问题是:是否有可能在<select>不了解深度的情况下建立一个?
先感谢您.
传递一个参数来计算迭代次数 $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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7503 次 |
| 最近记录: |