我有一个带有树数据结构的
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; }