巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
建站专提News

php经由过程前序遍历树完成无需递归的无穷极分类

一佰互联网站开辟设想(www.taishanly.com) 宣布日期 2020-04-27 10:45:01 阅读数: 129

本文实例报告了php经由过程前序遍历树完成无需递归的无穷极分类。分享给大师供大师参考。详细以下:

大师凡是都是操纵递归完成无穷极分类都晓得递归效力很低,上面先容一种改良的前序遍历树算法,不合用递归完成无穷极分类,在大数据量完成树状层级布局的时辰效力更高。

sql代码以下:

CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `lft` int(11) NOT NULL, `rgt` int(11) NOT NULL, `order` int(11) NOT NULL COMMENT "排序", `create_time` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;---- 转存表中的数据 `category`--INSERT INTO `category` (`id`, `title`, `lft`, `rgt`, `order`, `create_time`) VALUES(1, "顶级栏目", 1, 20, 1, 1261964806),(2, "编辑后的分类", 16, 19, 50, 1264586212),(4, "公司产物", 10, 15, 50, 1264586249),(5, "声誉天资", 8, 9, 50, 1264586270),(6, "材料下载", 6, 7, 50, 1264586295),(7, "人材雇用", 4, 5, 50, 1264586314),(8, "留言板", 2, 3, 50, 1264586884),(9, "总裁", 17, 18, 50, 1267771951),(10, "新的分类的子分类", 11, 14, 0, 1400044841),(11, "PHP点点通-http://www.phpddt.com", 12, 13, 0, 1400044901);

php代码以下:

<?php/** * 纯属测试 *  * @author Mckee * @link http://www.phpddt.com */class Category extends CI_Controller {  public function __construct()  {    parent::__construct();    $this->load->database();  }  public function view()  {    $lists = $this->db->order_by("lft", "asc")->get("category")->result_array();    //相邻的两笔记录的右值第一条的右值比第二条的大那末便是他的父类    //咱们用一个数组来存储上一笔记录的右值,再把它和本笔记录的右值比拟,若是前者比后者小,申明不是父子干系,就用array_pop弹出数组,不然就保留    //两个轮回罢了,不递归    $parent = array();    $arr_list = array();    foreach($lists as $item){      if(count($parent)){        while (count($parent) -1 > 0 && $parent[count($parent) -1]["rgt"] < $item["rgt"]){          array_pop($parent);        }        }      $item["depath"] = count($parent);      $parent[] = $item;      $arr_list[]= $item;    }    //显现树状布局    foreach($arr_list as $a)    {      echo str_repeat("--", $a["depath"]) . $a["title"] . "<br />";    }  }  /**   *    * 拔出操纵很简略找到其父节点,以后把左值和右值大于父节点左值的节点的摆布值加上2,以后再拔出本节点,摆布值别离为父节点左值加一和加二   */  public function add()  {    //获获得父级分类的id    $parent_id = 10;    $parent_category = $this->db->where("id", $parent_id)->get("category")->row_array();    //1.左值和右值大于父节点左值的节点的摆布值加上2    $this->db->set("lft", "lft + 2", FALSE)->where(array("lft >" => $parent_category["lft"]))->update("category");    $this->db->set("rgt", "rgt + 2", FALSE)->where(array("rgt >" => $parent_category["lft"]))->update("category");    //2.拔出新的节点    $this->db->insert("category", array(      "title" => "新的分类的子分类",      "lft" => $parent_category["lft"] + 1,      "rgt" => $parent_category["lft"] + 2,      "order" => 0,      "create_time" => time()    ));    echo "add success";  }  /**   * 删除   *    * //1.获得删除的节点,将右值减去左值而后加1,获得值$width = $rgt - $lft + 1;   * //2.删除摆布值之间的一切节点   * //3.点窜前提为大于本节点右值的一切节点,操纵为把他们的摆布值都减去$width   */  public function delete()  {    //经由过程分类id获得分类    $id = 3;    $category = $this->db->where("id", $id)->get("category")->row_array();    //计较$width    $width = $category["rgt"] - $category["lft"] + 1;    //1.删除该条分类    $this->db->delete("category", array("id" => $id));    //2.删除摆布值之间的一切分类    $this->db->delete("category", array("lft >" => $category["lft"], "lft <" => $category["rgt"]));    //3.点窜别的节点的值    $this->db->set("lft", "lft - {$width}", FALSE)->where(array("lft >" => $category["rgt"]))->update("category");    $this->db->set("rgt", "rgt - {$width}", FALSE)->where(array("rgt >" => $category["rgt"]))->update("category");    echo "delete success";  }  //编辑,  public function edit()  {    //不必说了, 间接经由过程id编辑    $id = 2;    $this->db->update("category", array(      "title" => "编辑后的分类"    ), array(      "id" => $id    ));    echo "edit success";  }}

但愿本文所述对大师的php法式设想有所赞助。

一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。更多资讯:tags标签

相干消息more

20
04月
HTML5 Canvas入门进修教程

HTML5事实甚么是HTML5?在W3C HTML5的罕见题目中,对于HTML5是如许申明的:HTML5是一个开放的平台下开辟的收费允许条目... >>概况

20
04月
操纵纯html5绘制出来的一款很是标致的时钟

明天给大师分享一款很是标致的纯html5完成的时钟。全部界面都由html5绘制而成。一路看下结果图:完成的代码。htm代码:XML/HTML... >>概况

01
05月
Bo-Blog公用的给Windows办事器的

本文将供给一个Bo-Blog用户在Windows的IIS 5.1/6.0办事器上完成URL Rewrite的计划。这个计划的长处是无需任何组... >>概况

11
05月
专业网站设想公司、专业网站扶植公司,让你的事

社会的剧烈合作,让良多名牌大学毕业的人都找不到专业对口的任务,那末当下市场甚么行业最具备贬值力呢?专业网站扶植,一家特地处置网站建造的公司,... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站