$data = db::name('AuthRule')->select();
$data = list_to_tree2($data,'id','pid');//aaa($data);
// halt($data);
$this->assign("nodeList", $data);
return $this->fetch();php
/** * 把返回的數據集轉換成Tree * @access public * @param array $list 要轉換的數據集 * @param string $pid parent標記字段 * @param string $level level標記字段 * @return array */ function list_to_tree2($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) { // 建立Tree $tree = array(); if(is_array($list)) { // 建立基於主鍵的數組引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key];//取出每一個欄目id做爲鍵名, } foreach ($list as $key => $data) {//開始循環,key從0開始一個一個往下走0123.。。 // 判斷是否存在parent $parentId = $data[$pid];//echo $parentId.'|';//0|112|116|117|112輸出每一個數組裏的pid if ($root == $parentId) {//key從0開始循環,若是是一級欄目pid==0 $tree[] =& $list[$key]; //用鏈接符,吧數組放到tree裏面 }else{ //若是pid不是0,那就是二級欄目 if (isset($refer[$parentId])) { $parent =& $refer[$parentId];//用pid去refer數組,匹配出父欄目數組,用鏈接符拼接到這裏 $parent[$child][] =& $list[$key];aaa($parent);//將當前二級欄目放到父欄目下,拼接成二維數組 } //仔細看list數組數據格式,第一遍key是0開始循環走的是tree哪裏, //第二遍從1開始走,走到parent這裏, } } } return $tree; }
打印出的數據格式:html
$list = Array ( [0] => Array ( [id] => 112 [name] => /Admin [title] => 後臺 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 0 [pid] => 0 [level] => 1 [update_time] => 1532081114 [create_time] => 1510821470 [is_display] => 1 ) [1] => Array ( [id] => 117 [name] => /Admin/Index/index [title] => 後臺首頁 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 0 [pid] => 116 [level] => 3 [update_time] => 1510821714 [create_time] => 1510821714 [is_display] => 1 ) } $refer = Array ( [112] => Array ( [id] => 112 [name] => /Admin [title] => 後臺 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 0 [pid] => 0 [level] => 1 [update_time] => 1532081114 [create_time] => 1510821470 [is_display] => 1 ) [117] => Array ( [id] => 117 [name] => /Admin/Index/index [title] => 後臺首頁 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 0 [pid] => 116 [level] => 3 [update_time] => 1510821714 [create_time] => 1510821714 [is_display] => 1 ) ) $tree = Array ( [0] => Array ( [id] => 112 [name] => /Admin [title] => 後臺 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 0 [pid] => 0 [level] => 1 [update_time] => 1532081114 [create_time] => 1510821470 [is_display] => 1 ) ) $parent = Array ( [id] => 116 [name] => /Admin/Index [title] => 首頁 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 1 [pid] => 112 [level] => 2 [update_time] => 1510821685 [create_time] => 1510821685 [is_display] => 1 [is_status] => 1 [_child] => Array ( [0] => Array ( [id] => 117 [name] => /Admin/Index/index [title] => 後臺首頁 [type] => 1 [node_icon] => [class_icon] => [status] => 1 [condition] => [sort] => 0 [pid] => 116 [level] => 3 [update_time] => 1510821714 [create_time] => 1510821714 [is_display] => 1 [is_status] => 1 ) ) )
頁面:node
<dt>管理權限</dt> <dd> <table width="100%" border="0" cellspacing="0" cellpadding="0" class="tab rules-data" data-rules="{present name ="$info['rules']"}{$info['rules']}{/present}"> {foreach name="nodeList" item="level1"} <tr> <td style="font-size: 14px;"><label><input name="rules[]" level="1" type="checkbox" obj="node_{$level1.id}" value="{$level1.id}" data="{$level1.id}:1:0" data-id="{$level1.id}" data-pid="0"/> <b class="mac-size">[項目]</b> {$level1.title}</label></td> </tr> {present name="level1['_child']"} {foreach name="level1['_child']" item="level2" } <tr> <td style="padding-left:60px; font-size: 14px;"><label><input name="rules[]" level="2" type="checkbox" obj="node_{$level1.id}_{$level2.id}" value="{$level2.id}" data="{$level2.id}:2:{$level2.pid}" data-id="{$level2.id}" data-pid="{$level2.pid}"/> <b class="mac-size">[模塊]</b> {$level2.title}</label></td> </tr> {present name="$level2['_child']"} {volist name="level2['_child']" id="level3"} <tr ><td style="padding-left: 120px;"> <label><input name="rules[]" level="3" type="checkbox" obj="node_{$level1.id}_{$level2.id}_{$level3.id}" value="{$level3.id}" data="{$level3.id}:3:{$level3.pid}" data-id="{$level3.id}" data-pid="{$level3.pid}"/> <b class="mac-size">[操做]</b>{$level3.title}</label> </td></tr> {present name="$level3['_child']"} <tr> <td style="padding-left: 160px;"> {foreach name="level3['_child']" item="level4" key="k" } {if condition="$level4.is_display eq 1"}| {/if} <label> <input name="rules[]" level="4" type="checkbox" obj="node_{$level1.id}_{$level2.id}_{$level3.id}_{$level4.id}" value="{$level4.id}" data="{$level4.id}:4:{$level4.pid}" data-id="{$level4.id}" data-pid="{$level4.pid}"/> {$level4.title} </label> {/foreach} </td> </tr> {/present} {/volist} {/present} {/foreach} {/present} {/foreach}