// //另外一种显示方式,用数组作为堆栈,A: 压栈时存role,压完就删除source // $this->CheckProperty('mrDb'); // $this->CheckProperty('mrSql'); // $this->mrSql->Select('role, title, parent'); // $this->mrSql->From($this->mTableUserRole); // $this->mrSql->Orderby('parent, sequence'); // $this->mRs = $this->mrDb->Execute($this->mrSql->Sql()); // if (0 < count($this->mRs)) // { // $source = & $this->mRs->GetArray(); //数字索引 // $stack = array(''); //堆栈 // $stacki = array(-1); //和堆栈对应,记录堆栈中数据在树中的层次 // $target = array(); // while (0 < count($stack)) // { // $item = array_shift($stack); // $lev = array_shift($stacki); // if (!empty($item)) // { // //在这里把加工过的数据放到target数组 // array_push($target, str_repeat(' ', $lev) . $item); // //$s1 = str_repeat(' ', $lev) . $item; // } // $del = array(); //要从$source中删除的节点 // $ar = array(); //需要添加到堆栈中的节点 // foreach ($source as $key=>$val) // { // //寻找匹配的子节点 // if (empty($item)) // { // $find = empty($source[$key]['parent']); // } // else // { // $find = ($item == $source[$key]['parent']); // } // if ($find) // { // array_unshift($ar, $source[$key]['role']); // $del[] = $key; // } // } // foreach ($ar as $val) // { // array_unshift($stack, $val); // array_unshift($stacki, $lev + 1); // } // foreach ($del as $val) // { // unset($source[$val]); // } // echo(implode(', ', $stack) . '<br />' . implode(', ', $stacki) . '<br />' . implode(', ', $target) . '<br /><br />'); // } // debug_array(); // } // else // { // echo('<center>没有检索到数据</center>'); // } //另外一种显示方式,用数组作为堆栈,B: 压栈时存数组索引,出栈并使用完后再删除source $this->CheckProperty('mrDb'); $this->CheckProperty('mrSql'); $this->mrSql->Select('role, title, parent'); $this->mrSql->From($this->mTableUserRole); $this->mrSql->Orderby('parent, sequence'); $this->mRs = $this->mrDb->Execute($this->mrSql->Sql()); if (!empty($this->mRs) && !$this->mRs->EOF) { $source = & $this->mRs->GetArray(); //数字索引 $stack = array(-1); //堆栈 $stacki = array(-1); //和堆栈对应,记录堆栈中数据在树中的层次 $target = array(); while (0 < count($stack)) { $item = array_shift($stack); $lev = array_shift($stacki); if (-1 != $item) { //在这里把加工过的数据放到target数组 $s1 = str_repeat(' ', $lev) . '<a href="?action=disp&part=role&role=' . $source[$item]['role'] . '">' . $source[$item]['title'] . '</a>'; $s2 = '<a href="?action=edit&part=role&role=' . $source[$item]['role'] . '">编辑</a> <a href="?action=delete&part=role&role=' . $source[$item]['role'] . '">删除</a>'; array_push($target, array($s1, $s2)); |