中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 開發技術 > 
  • 如何實現php無限級分類,超級簡單的無限級分類,支持輸出樹狀圖

如何實現php無限級分類,超級簡單的無限級分類,支持輸出樹狀圖

發布時間:2021-09-29 11:36:36 來源:億速云 閱讀:128 作者:iii 欄目:開發技術

本篇內容介紹了“如何實現php無限級分類,超級簡單的無限級分類,支持輸出樹狀圖”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

無平臺限制
只需要告知id,parentid,name 即可

<?php
error_reporting(E_ALL ^ E_NOTICE);

class Tree
{
 
  /**
   +------------------------------------------------
   * 生成樹型結構所需要的2維數組
   +------------------------------------------------
   * @author abc
   +------------------------------------------------
   * @var Array
   */
  var $arr = array();
 
  /**
   +------------------------------------------------
   * 生成樹型結構所需修飾符號,可以換成圖片
   +------------------------------------------------
   * @author abc
   +------------------------------------------------
   * @var Array
   */
  var $icon = array(' │',' ├',' └');
 
  /**
  * @access private
  */
  var $ret = '';
 
  /**
  * 構造函數,初始化類
  * @param array 2維數組,例如:
  * 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'=>'三級欄目二')
  *   )
  */
  function tree($arr=array())
  {
    $this->arr = $arr;
    $this->ret = '';
    return is_array($arr);
  }
 
  /**
  * 得到父級數組
  * @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;
  }
 
  /**
  * 得到子級數組
  * @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;
  }
 
  /**
  * 得到當前位置數組
  * @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;
  }
 
  /**
   * -------------------------------------
   * 得到樹型結構
   * -------------------------------------
   * @author abc
   * @param $myid 表示獲得這個ID下的所有子級
   * @param $str 生成樹形結構基本代碼, 例如: "<option value=\$id \$select>\$spacer\$name</option>"
   * @param $sid 被選中的ID, 比如在做樹形下拉框的時候需要用到
   * @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.','));
  }
 
  /**
   +------------------------------------------------
   * 格式化數組
   +------------------------------------------------
   * @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'=>'一級欄目一'), 
     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'=>''), 
		 8 => array('id'=>'8','parentid'=>3,'name'=>'三級欄目三'),
		 9 => array('id'=>'9','parentid'=>7,'name'=>'四級分類三'),
     ); 
$tree = new Tree;      
$tree->tree($data);    
 
// 如果使用數組, 請使用 getArray方法 
//$tree->getArray(); 
// 下拉菜單選項使用 get_tree方法 
$html='<select name="tree">'; 
$str = "<option value=\$id \$select>\$spacer\$name</option>"; 
$html .= $tree->get_tree(0,$str,-1).'</select>'; 
echo $html; 
?>

“如何實現php無限級分類,超級簡單的無限級分類,支持輸出樹狀圖”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

乌鲁木齐县| 星子县| 吉林市| 涞水县| 依安县| 禄丰县| 永年县| 隆回县| 平遥县| 正宁县| 进贤县| 都江堰市| 桂林市| 广宗县| 睢宁县| 宾川县| 文化| 凤凰县| 富平县| 宽甸| 东乌珠穆沁旗| 兴宁市| 开平市| 崇阳县| 延津县| 建阳市| 盱眙县| 河西区| 凭祥市| 景德镇市| 崇礼县| 略阳县| 团风县| 虎林市| 观塘区| 永安市| 墨江| 聊城市| 宁陕县| 古田县| 平远县|