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

php 無限級(jí)分類,超級(jí)簡單的無限級(jí)分類,支持輸出樹狀圖

 更新時(shí)間:2014年06月29日 12:18:05   投稿:mdxy-dxy  
php 無限級(jí)分類,超級(jí)簡單的無限級(jí)分類,支持輸出樹狀圖,代碼來自網(wǎng)絡(luò), 只是自己用了挺長時(shí)間特地拿出來分享給大家

無平臺(tái)限制
只需要告知id,parentid,name 即可

<?php
error_reporting(E_ALL ^ E_NOTICE);

class Tree
{
 
  /**
   +------------------------------------------------
   * 生成樹型結(jié)構(gòu)所需要的2維數(shù)組
   +------------------------------------------------
   * @author abc
   +------------------------------------------------
   * @var Array
   */
  var $arr = array();
 
  /**
   +------------------------------------------------
   * 生成樹型結(jié)構(gòu)所需修飾符號(hào),可以換成圖片
   +------------------------------------------------
   * @author abc
   +------------------------------------------------
   * @var Array
   */
  var $icon = array(' │',' ├',' └');
 
  /**
  * @access private
  */
  var $ret = '';
 
  /**
  * 構(gòu)造函數(shù),初始化類
  * @param array 2維數(shù)組,例如:
  * array(
  *   1 => array('id'=>'1','parentid'=>0,'name'=>'一級(jí)欄目一'),
  *   2 => array('id'=>'2','parentid'=>0,'name'=>'一級(jí)欄目二'),
  *   3 => array('id'=>'3','parentid'=>1,'name'=>'二級(jí)欄目一'),
  *   4 => array('id'=>'4','parentid'=>1,'name'=>'二級(jí)欄目二'),
  *   5 => array('id'=>'5','parentid'=>2,'name'=>'二級(jí)欄目三'),
  *   6 => array('id'=>'6','parentid'=>3,'name'=>'三級(jí)欄目一'),
  *   7 => array('id'=>'7','parentid'=>3,'name'=>'三級(jí)欄目二')
  *   )
  */
  function tree($arr=array())
  {
    $this->arr = $arr;
    $this->ret = '';
    return is_array($arr);
  }
 
  /**
  * 得到父級(jí)數(shù)組
  * @param int
  * @return array
  */
  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;
  }
 
  /**
  * 得到子級(jí)數(shù)組
  * @param int
  * @return array
  */
  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;
  }
 
  /**
  * 得到當(dāng)前位置數(shù)組
  * @param int
  * @return array
  */
  function get_pos($myid,&$newarr)
  {
    $a = array();
    if(!isset($this->arr[$myid])) return false;
    $newarr[] = $this->arr[$myid];
    $pid = $this->arr[$myid]['parentid'];
    if(isset($this->arr[$pid]))
    {
      $this->get_pos($pid,$newarr);
    }
    if(is_array($newarr))
    {
      krsort($newarr);
      foreach($newarr as $v)
      {
        $a[$v['id']] = $v;
      }
    }
    return $a;
  }
 
  /**
   * -------------------------------------
   * 得到樹型結(jié)構(gòu)
   * -------------------------------------
   * @author abc
   * @param $myid 表示獲得這個(gè)ID下的所有子級(jí)
   * @param $str 生成樹形結(jié)構(gòu)基本代碼, 例如: "<option value=\$id \$select>\$spacer\$name</option>"
   * @param $sid 被選中的ID, 比如在做樹形下拉框的時(shí)候需要用到
   * @param $adds
   * @param $str_group
   */
  function get_tree($myid, $str, $sid = 0, $adds = '', $str_group = '')
  {
    $number=1;
    $child = $this->get_child($myid);
    if(is_array($child)) {
      $total = count($child);
      foreach($child as $id=>$a) {
        $j=$k='';
        if($number==$total) {
          $j .= $this->icon[2];
        } else {
          $j .= $this->icon[1];
          $k = $adds ? $this->icon[0] : '';
        }
        $spacer = $adds ? $adds.$j : '';
        $selected = $id==$sid ? 'selected' : '';
        @extract($a);
        $parentid == 0 && $str_group ? eval("\$nstr = \"$str_group\";") : eval("\$nstr = \"$str\";");
        $this->ret .= $nstr;
        $this->get_tree($id, $str, $sid, $adds.$k.'&nbsp;',$str_group);
        $number++;
      }
    }
    return $this->ret;
  }
 
  /**
  * 同上一方法類似,但允許多選
  */
  function get_tree_multi($myid, $str, $sid = 0, $adds = '')
  {
    $number=1;
    $child = $this->get_child($myid);
    if(is_array($child))
    {
      $total = count($child);
      foreach($child as $id=>$a)
      {
        $j=$k='';
        if($number==$total)
        {
          $j .= $this->icon[2];
        }
        else
        {
          $j .= $this->icon[1];
          $k = $adds ? $this->icon[0] : '';
        }
        $spacer = $adds ? $adds.$j : '';
 
        $selected = $this->have($sid,$id) ? 'selected' : '';
        @extract($a);
        eval("\$nstr = \"$str\";");
        $this->ret .= $nstr;
        $this->get_tree_multi($id, $str, $sid, $adds.$k.'&nbsp;');
        $number++;
      }
    }
    return $this->ret;
  }
 
  function have($list,$item){
    return(strpos(',,'.$list.',',','.$item.','));
  }
 
  /**
   +------------------------------------------------
   * 格式化數(shù)組
   +------------------------------------------------
   * @author abc
   +------------------------------------------------
   */
  function getArray($myid=0, $sid=0, $adds='')
  {
    $number=1;
    $child = $this->get_child($myid);
    if(is_array($child)) {
      $total = count($child);
      foreach($child as $id=>$a) {
        $j=$k='';
        if($number==$total) {
          $j .= $this->icon[2];
        } else {
          $j .= $this->icon[1];
          $k = $adds ? $this->icon[0] : '';
        }
        $spacer = $adds ? $adds.$j : '';
        @extract($a);
        $a['name'] = $spacer.' '.$a['name'];
        $this->ret[$a['id']] = $a;
        $fd = $adds.$k.'&nbsp;';
        $this->getArray($id, $sid, $fd);
        $number++;
      }
    }
 
    return $this->ret;
  }
}



$data=array( 
     1 => array('id'=>'1','parentid'=>0,'name'=>'一級(jí)欄目一'), 
     2 => array('id'=>'2','parentid'=>0,'name'=>'一級(jí)欄目二'), 
     3 => array('id'=>'3','parentid'=>1,'name'=>'二級(jí)欄目一'), 
     4 => array('id'=>'4','parentid'=>1,'name'=>'二級(jí)欄目二'), 
     5 => array('id'=>'5','parentid'=>2,'name'=>'二級(jí)欄目三'), 
     6 => array('id'=>'6','parentid'=>3,'name'=>'三級(jí)欄目一'), 
     7 => array('id'=>'7','parentid'=>3,'name'=>''), 
		 8 => array('id'=>'8','parentid'=>3,'name'=>'三級(jí)欄目三'),
		 9 => array('id'=>'9','parentid'=>7,'name'=>'四級(jí)分類三'),
     ); 
$tree = new Tree;      
$tree->tree($data);    
 
// 如果使用數(shù)組, 請使用 getArray方法 
//$tree->getArray(); 
// 下拉菜單選項(xiàng)使用 get_tree方法 
$html='<select name="tree">'; 
$str = "<option value=\$id \$select>\$spacer\$name</option>"; 
$html .= $tree->get_tree(0,$str,-1).'</select>'; 
echo $html; 
?>

相關(guān)文章

  • PHP+JQuery+Ajax實(shí)現(xiàn)分頁方法詳解

    PHP+JQuery+Ajax實(shí)現(xiàn)分頁方法詳解

    這篇文章主要介紹了PHP+JQuery+Ajax實(shí)現(xiàn)分頁的方法,結(jié)合實(shí)例形式詳細(xì)分析了php數(shù)據(jù)查詢、分頁設(shè)置及ajax交互的相關(guān)技巧,并總結(jié)了分頁的相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2016-08-08
  • PHP根據(jù)樹的前序遍歷和中序遍歷構(gòu)造樹并輸出后序遍歷的方法

    PHP根據(jù)樹的前序遍歷和中序遍歷構(gòu)造樹并輸出后序遍歷的方法

    這篇文章主要介紹了PHP根據(jù)樹的前序遍歷和中序遍歷構(gòu)造樹并輸出后序遍歷的方法,涉及php數(shù)據(jù)結(jié)構(gòu)與算法中關(guān)于數(shù)的遍歷相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • PHP 實(shí)現(xiàn)判斷用戶是否手機(jī)訪問

    PHP 實(shí)現(xiàn)判斷用戶是否手機(jī)訪問

    這篇文章主要介紹了PHP 實(shí)現(xiàn)判斷用戶是否手機(jī)訪問的方法,十分實(shí)用的功能,推薦給有需要的小伙伴。
    2015-01-01
  • PHP中break及continue兩個(gè)流程控制指令區(qū)別分析

    PHP中break及continue兩個(gè)流程控制指令區(qū)別分析

    php中常用的for與foreach循環(huán)中,經(jīng)常遇到條件判斷或中止循環(huán)的情況。而處理方式主要用到break及continue兩個(gè)流程控制指令,現(xiàn)在說明主要區(qū)別
    2011-04-04
  • php自動(dòng)識(shí)別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法

    php自動(dòng)識(shí)別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法

    這篇文章主要介紹了php自動(dòng)識(shí)別文字編碼并轉(zhuǎn)換為目標(biāo)編碼的方法,涉及php針對當(dāng)前編碼的判斷與對應(yīng)的編碼轉(zhuǎn)換實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-08-08
  • php上傳文件的增強(qiáng)函數(shù)

    php上傳文件的增強(qiáng)函數(shù)

    php文件上傳的增強(qiáng)函數(shù)首先變得傻瓜簡單化,但并不是該函數(shù)的簡單化就影響他的超強(qiáng)功能,并且加上了強(qiáng)大的除錯(cuò)功能這是一函數(shù),當(dāng)然你可以把它變成一個(gè)類的方法!
    2010-07-07
  • php實(shí)現(xiàn)的微信分享到朋友圈并記錄分享次數(shù)功能

    php實(shí)現(xiàn)的微信分享到朋友圈并記錄分享次數(shù)功能

    這篇文章主要介紹了php實(shí)現(xiàn)的微信分享到朋友圈并記錄分享次數(shù)功能,結(jié)合實(shí)例形式分析了php微信分享功能接口調(diào)用及分享次數(shù)統(tǒng)計(jì)具體操作技巧,需要的朋友可以參考下
    2018-01-01
  • 淺析PHP類的反射來實(shí)現(xiàn)依賴注入過程

    淺析PHP類的反射來實(shí)現(xiàn)依賴注入過程

    這篇文章主要介紹了PHP類的反射來實(shí)現(xiàn)依賴注入過程以及相關(guān)知識(shí)點(diǎn)分享,對此有興趣的朋友跟著小編學(xué)習(xí)下吧。
    2018-02-02
  • php拋出異常與捕捉特定類型的異常詳解

    php拋出異常與捕捉特定類型的異常詳解

    異常捕獲在現(xiàn)在很多ide工具里都可以用快捷鍵很方便的添加上,防止用戶看到自己看不懂的報(bào)錯(cuò)甚至莫名其妙崩潰,導(dǎo)致用戶體驗(yàn)不好。哪怕顯示一個(gè)友好一些的崩潰提示,也比直接顯示error:xxxx xxxxxxxxx要好得多。下面本文將詳細(xì)介紹php如何拋出異常與捕捉特定類型的異常。
    2016-10-10
  • PHP動(dòng)態(tài)柱狀圖實(shí)現(xiàn)方法

    PHP動(dòng)態(tài)柱狀圖實(shí)現(xiàn)方法

    這篇文章主要介紹了PHP動(dòng)態(tài)柱狀圖實(shí)現(xiàn)方法,實(shí)例分析了php結(jié)合HTML元素實(shí)現(xiàn)動(dòng)態(tài)柱狀圖的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評論