欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

2款PHP無限級分類實例代碼

 更新時間:2015年11月11日 14:21:06   投稿:lijiao  
這篇文章主要介紹了2款PHP無限級分類實例代碼,需要的朋友可以參考下

本文章總結了兩款PHP無限級分類實現(xiàn)程序代碼,有需要學習的朋友可參考一下。
主要思路:首先看第三行和第四行,父類ID(PARENTID)的值是1,表示屬于id=1這個類的子類,而,一,二兩行因為是一級分類,沒有上級分類,所以父類ID(PARENTID)的值是0,表示初級分類,依次類推便實現(xiàn)了無限級分類。最終的效果是:
├一級分類A
├─┴二級分類A
├─┴二級分類B
├一級分類B
然后就是程序,這里以PHP作為描述語言,可以很方便的改成其他語言,因為原理相似,就是一個遞歸而已。

 <?php
$dbhost = "localhost";  // 數(shù)據(jù)庫主機名
$dbuser = "root";  // 數(shù)據(jù)庫用戶名
$dbpd = "123456";  // 數(shù)據(jù)庫密碼
$dbname = "test";  // 數(shù)據(jù)庫名
mysql_connect($dbhost,$dbuser,$dbpd);    //連接主機
mysql_select_db($dbname);    //選擇數(shù)據(jù)庫
mysql_query("SET NAMES 'utf8'");
display_tree("├",0);
function display_tree($tag,$classid) {
  $result = mysql_query("
    SELECT *
    FROM ylmf_class
    WHERE parentid = '" . $classid . "'
    ;"
  );
  while ($row = mysql_fetch_array($result)) {
    // 縮進顯示節(jié)點名稱
 echo $tag.$row['classname'] . "<br/>";
    //再次調(diào)用這個函數(shù)顯示子節(jié)點的子節(jié)點
 display_tree($tag."─┴",$row['id']);
  }
}
?>

在表格中顯示
TreeTable通過對單元格的行合并和列合并實現(xiàn)了無限層級也能較好的展示層級架構。
1.構建ID/PID/NAME的數(shù)組,后期可通過數(shù)據(jù)庫生成的動態(tài)數(shù)據(jù)。Tree算法請點擊

array(
* 1 => array('id'=>'1','parentid'=>0,'name'=>'一級欄目一'),
* 2 => array('id'=>'2','parentid'=>0,'name'=>'一級欄目二'),
* 3 => array('id'=>'3','parentid'=>1,'name'=>'二級欄目一'),
* 4 => array('id'=>'4','parentid'=>1,'name'=>'二級欄目二'),
* 5 => array('id'=>'5','parentid'=>2,'name'=>'二級欄目三'),
* 6 => array('id'=>'6','parentid'=>3,'name'=>'三級欄目一'),
* 7 => array('id'=>'7','parentid'=>3,'name'=>'三級欄目二')
* )

2. 導入TreeTable類庫。
代碼如下:

import('@.ORG.Util.TableTree'); //Thinkphp導入方法

3. 生成TreeTable HTML代碼

 $treeTable->init($treearr);
echo $treeTable->get_treetable();

注意:get_treetable()只生產(chǎn)表體部門,<TALBE></TABLE>請自行構建。
完整代碼

<?php
/**
* File name: TreeTable.class.php
* Description: 通用的表格無限級分類
* */
/**
* 表格展示無限分類是將無線分類已表格的形式表現(xiàn)出來,更好的能體現(xiàn)出分類的所屬關系
* 使用方法:
* 1. 實例化分類
* $treeTable = new TreeTable();
* 2. 初始化分類,$treearr必須是一個多維數(shù)組且包含 id,parentid,name字段
* $treeTable->init($treearr);
* 3. 獲取無限分類HTML代碼
* echo $treeTable->get_treetable();
* */
class TreeTable {
/**
* 生成樹型結構所需要的2維數(shù)組
* @var array
*/
public $arr = array();
/**
* 表格列數(shù)
* @var int
*/
public $columns = 0;
/**
* 表格行數(shù)
* @var int
*/
public $rows = 0;
/**
* 初始化TreeTable數(shù)據(jù)
* @param array 2維數(shù)組
* array(
* 1 => array('id'=>'1','parentid'=>0,'name'=>'一級欄目一'),
* 2 => array('id'=>'2','parentid'=>0,'name'=>'一級欄目二'),
* 3 => array('id'=>'3','parentid'=>1,'name'=>'二級欄目一'),
* 4 => array('id'=>'4','parentid'=>1,'name'=>'二級欄目二'),
* 5 => array('id'=>'5','parentid'=>2,'name'=>'二級欄目三'),
* 6 => array('id'=>'6','parentid'=>3,'name'=>'三級欄目一'),
* 7 => array('id'=>'7','parentid'=>3,'name'=>'三級欄目二')
* )
*/
public function init($arr=array()){
if(!is_array($arr)) return false;
foreach ($arr as $k=>$v) {
$this->arr[$v['id']] = $v;
}
foreach ($this->arr as $k => $v){
$this->arr[$k]['column'] = $this->get_level($v['id']); // Y軸位置
$this->arr[$k]['arrchildid'] = $this->get_arrchildid($v['id']); // 所有子節(jié)點
$this->arr[$k]['arrparentid'] = $this->get_arrparentid($v['id']); // 所有父節(jié)點
$this->arr[$k]['child_bottom_num'] = $this->get_child_count($v['id']); // 所有底層元素節(jié)點
}
$this->columns = $this->get_columns(); // 總行數(shù)
$this->rows = $this->get_rows(); // 總列數(shù)
// 按照arrparentid和id號進行排序
$this->sort_arr();
foreach ($this->arr as $k => $v){
$this->arr[$k]['row'] = $this->get_row_location($v['id']); // X軸位置
$this->arr[$k]['rowspan'] = $v['child_bottom_num']; // 行合并數(shù)
$this->arr[$k]['colspan'] = $v['child_bottom_num'] == 0 ? $this->columns - $v['column'] + 1 : 0; //列合并數(shù)
}
return $this->get_tree_arr();
}
/**
* 獲取數(shù)組
* */
public function get_tree_arr(){
return is_array($this->arr) ? $this->arr : false;
}
/**
* 按arrparentid/id號依次重新排序數(shù)組
* */
public function sort_arr(){
// 要進行排序的字段
foreach ($this->arr as $k => $v){
$order_pid_arr[$k] = $v['arrparentid'];
$order_iscost[] = $v['sort'];
$order_id_arr[$k] = $v['id'];
}
// 先根據(jù)arrparentid排序,再根據(jù)排序,id號排序
array_multisort(
$order_pid_arr, SORT_ASC, SORT_STRING,
$order_iscost, SORT_DESC, SORT_NUMERIC,
$order_id_arr, SORT_ASC, SORT_NUMERIC,
$this->arr);
// 獲取每一個節(jié)點層次
for ($column = 1; $column <= $this->columns; $column++) {
$row_level = 0;
foreach ($this->arr as $key => $node){
if ($node['column'] == $column){
$row_level++;
$this->arr[$key]['column_level'] = $row_level;
}
}
}
// 重新計算以ID作為鍵名
foreach ($this->arr as $k=>$v) {
$arr[$v['id']] = $v;
}
$this->arr = $arr;
}
/**
* 得到父級數(shù)組
* @param int
* @return array
*/
public function get_parent($myid){
$newarr = array();
if(!isset($this->arr[$myid])) return false;
$pid = $this->arr[$myid]['parentid'];
$pid = $this->arr[$pid]['parentid'];
if(is_array($this->arr)){
foreach($this->arr as $id => $a){
if($a['parentid'] == $pid) $newarr[$id] = $a;
}
}
return $newarr;
}
/**
* 得到子級數(shù)組
* @param int
* @return array
*/
public function get_child($myid){
$a = $newarr = array();
if(is_array($this->arr)){
foreach($this->arr as $id => $a){
if($a['parentid'] == $myid) $newarr[$id] = $a;
}
}
return $newarr ? $newarr : false;
}
/**
* 獲取當前節(jié)點所在的層級
* @param $myid 當前節(jié)點ID號
* */
public function get_level($myid, $init = true){
static $level = 1;
if($init) $level = 1;
if ($this->arr[$myid]['parentid']) {
$level++;
$this->get_level($this->arr[$myid]['parentid'], false);
}
return $level;
}
/**
* 獲取當前節(jié)點所有底層節(jié)點(沒有子節(jié)點的節(jié)點)的數(shù)量
* @param $myid 節(jié)點ID號
* @param $init 第一次加載將情況static變量
* */
public function get_child_count($myid, $init = true){
static $count = 0;
if($init) $count = 0;
if(!$this->get_child($myid) && $init) return 0;
if($childarr = $this->get_child($myid)){
foreach ($childarr as $v){
$this->get_child_count($v['id'], false);
}
}else{
$count++;
}
return $count;
}
/**
* 獲取節(jié)點所有子節(jié)點ID號
* @param $catid 節(jié)點ID號
* @param $init 第一次加載將情況static初始化
* */
public function get_arrchildid($myid, $init = true) {
static $childid;
if($init) $childid = '';
if(!is_array($this->arr)) return false;
foreach($this->arr as $id => $a){
if($a['parentid'] == $myid) {
$childid = $childid ? $childid.','.$a['id'] : $a['id'];
$this->get_arrchildid($a['id'], false);
}
}
return $childid ;
}
/**
* 獲取該節(jié)點所有父節(jié)點ID號
* @param $id 節(jié)點ID號
* */
public function get_arrparentid($id, $arrparentid = '') {
if(!is_array($this->arr)) return false;
$parentid = $this->arr[$id]['parentid'];
if($parentid > 0) $arrparentid = $arrparentid ? $parentid.','.$arrparentid : $parentid;
if($parentid) $arrparentid = $this->get_arrparentid($parentid, $arrparentid);
return $arrparentid;
}
/**
* 獲取節(jié)點所在地行定位
* @param $myid 節(jié)點ID號
*/
public function get_row_location($myid){
$nodearr = $this->arr;
// 獲取每一個節(jié)點所在行的位置
foreach ($nodearr as $key => $node){
if($myid == $node['id']) {
$node_row_count = 0;
$arrparentid = explode(',', $node['arrparentid']);
// 所有父節(jié)點小于當前節(jié)點層次的底層節(jié)點等于0的元素
foreach ($arrparentid as $pid){
foreach ($nodearr as $node_row){
if($node_row['column'] == $nodearr[$pid]['column'] && $nodearr[$pid]['column_level'] > $node_row['column_level'] && $node_row['child_bottom_num'] == 0){
$node_row_count ++;
}
}
}
// 所有當前節(jié)點并且節(jié)點層次(rowid_level)小于當前節(jié)點層次的個數(shù)
foreach ($nodearr as $node_row){
if($node['column'] == $node_row['column'] && $node_row['column_level'] < $node['column_level']){
$node_row_count += $node_row['child_bottom_num'] ? $node_row['child_bottom_num'] : 1;
}
}
$node_row_count++;
break;
}
}
return $node_row_count;
}
/**
* 獲取表格的行數(shù)
* */
public function get_rows(){
$row = 0;
foreach ($this->arr as $key => $node){
if($node['child_bottom_num'] == 0){
$rows++; // 總行數(shù)
}
}
return $rows;
}
/**
* 獲取表格的列數(shù)
* */
public function get_columns(){
$columns = 0 ;
foreach ($this->arr as $key => $node){
if($node['column'] > $columns){
$columns = $node['column']; // 總列數(shù)
}
}
return $columns;
}
/**
* 獲取分類的表格展現(xiàn)形式(不包含表頭)
* */
public function get_treetable(){
$table_string = '';
for($row = 1; $row <= $this->rows; $row++){
$table_string .= "rt<tr>";
foreach ($this->arr as $v){
if($v['row'] == $row){
$rowspan = $v['rowspan'] ? "rowspan='{$v['rowspan']}'" : '';
$colspan = $v['colspan'] ? "colspan='{$v['colspan']}'" : '';
$table_string .= "rtt<td {$rowspan} {$colspan}>
{$v['name']}
</td>";
}
}
$table_string .= "rt</tr>";
}
return $table_string;
}
}
?>

希望本文所述對大家學習php程序設計有所幫助。

相關文章

  • php實現(xiàn)refresh刷新頁面批量導入數(shù)據(jù)的方法

    php實現(xiàn)refresh刷新頁面批量導入數(shù)據(jù)的方法

    這篇文章主要介紹了php實現(xiàn)refresh刷新頁面批量導入數(shù)據(jù)的方法,借鑒了dedecms批量生成html的原理,采用refresh代替js跳轉來實現(xiàn),非常具有實用價值,需要的朋友可以參考下
    2014-12-12
  • 有關PHP中MVC的開發(fā)經(jīng)驗分享

    有關PHP中MVC的開發(fā)經(jīng)驗分享

    經(jīng)過近一個月對MVC的研究,自己也通過網(wǎng)上有朋友的指導,有了一套自己的MVC流程及框架,但是感覺缺限還是很多,靈活性方面還是欠缺,但又不知道怎么樣的具體改進,今天我就把我的流程及思想發(fā)布,希望有高人能夠指點指點
    2012-05-05
  • 基于PHP實現(xiàn)的事件機制實例分析

    基于PHP實現(xiàn)的事件機制實例分析

    這篇文章主要介紹了基于PHP實現(xiàn)的事件機制,實例分析了事件機制的原理及php中debug_backtrace函數(shù)完成事件機制的實現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • PHP基于curl模擬post提交json數(shù)據(jù)示例

    PHP基于curl模擬post提交json數(shù)據(jù)示例

    這篇文章主要介紹了PHP基于curl模擬post提交json數(shù)據(jù)操作,結合實例形式分析了php使用curl實現(xiàn)post方式提交json數(shù)據(jù)相關操作步驟與注意事項,代碼簡單實用,需要的朋友可以參考下
    2018-06-06
  • 淺談Swoole并發(fā)編程的魅力

    淺談Swoole并發(fā)編程的魅力

    PHP語言是一個短生命周期的Web編程語言,很多PHPer已經(jīng)形成了fpm下編程的思維定勢。實際上在Swoole出現(xiàn)之后,這種串行化編程的模式早已被打破。使用Swoole完全可以輕易實現(xiàn)更靈活的并發(fā)編程。
    2021-05-05
  • php修改時間格式的代碼

    php修改時間格式的代碼

    php修改時間格式的代碼,需要的朋友可以參考下。
    2011-05-05
  • 六酷社區(qū)論壇HOME頁清新格調(diào)免費版 下載

    六酷社區(qū)論壇HOME頁清新格調(diào)免費版 下載

    六酷社區(qū)論壇HOME頁清新格調(diào)免費版 下載...
    2007-03-03
  • PHP實現(xiàn)處理三級分類數(shù)據(jù)的示例代碼

    PHP實現(xiàn)處理三級分類數(shù)據(jù)的示例代碼

    這篇文章主要為大家詳細介紹了如何利用PHP實現(xiàn)處理三級分類數(shù)據(jù),文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-02-02
  • php中隨機顯示圖片的函數(shù)代碼

    php中隨機顯示圖片的函數(shù)代碼

    一個隨機顯示圖片的函數(shù),可以將指定文件夾中存放的圖片隨機地顯示出來,可以在很多地方使用
    2011-06-06
  • php實現(xiàn)word轉html的方法

    php實現(xiàn)word轉html的方法

    這篇文章主要介紹了php實現(xiàn)word轉html的方法,涉及PHP調(diào)用com組件操作word文檔的相關技巧,需要的朋友可以參考下
    2016-01-01

最新評論