我有一个带有树数据结构的
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
)
)
)
)
打印无序列表< 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;
}
但我坚持打印一个< select>以树形结构的方式:
Countries -- America ---- Canada ------ ottawa -- Asia -- Europe ---- Italy ---- Germany ---- France -- Oceania
我想要打印 – 与元素的深度一样多次,但我不知道如何计算深度.
我的问题是:是否可以构建一个< 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;
}