php+mysql实现的无限分类方法类定义与使用示例


Posted in PHP onMay 27, 2020

本文实例讲述了php+mysql实现的无限分类方法类定义与使用。分享给大家供大家参考,具体如下:

创建数据库以及表

CREATE DATABASE `sortclass`DEFAULT CHARSET utf8;
 CREATE TABLE IF NOT EXISTS `class` (
 `cid` mediumint(8) unsigned NOT NULL auto_increment,
 `pid` mediumint(8) unsigned NOT NULL,
 `cname` varchar(50) NOT NULL,
 PRIMARY KEY (`cid`),
 KEY `pid` (`pid`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
header("Content-type: text/html; charset=utf-8");
//连接数据库
$link = mysql_connect('localhost','root','eric') or die(mysql_error());
mysql_select_db('sortclass',$link);
//无限分类类库
class SortClass{
 var $data = array();
 var $child = array(-1=>array());
 var $layer = array(-1=>-1);
 var $parent = array();
 var $link;
 var $table;
 function SortClass($link, $table){
  $this->setNode(0, -1, '顶极节点');
  $this->link = $link;
  $this->table = $table;
  $node = array();
  $results = mysql_query('select * from '.$this->table.'',$this->link);
  while($node = mysql_fetch_assoc($results)){
   $this->setNode($node['cid'],$node['pid'],$node['cname']);
  }
 }
 function setNode ($id, $parent, $value){
  $parent = $parent?$parent:0;
  $this->data[$id] = $value;
  $this->child[$id] = array();
  $this->child[$parent][] = $id;
  $this->parent[$id] = $parent;
  $this->layer[$id] = !isset($this->layer[$parent])? 0 : $this->layer[$parent] + 1;
 }
 function getList (&$tree, $root= 0){
  foreach ($this->child[$root] as $key=>$id){
   $tree[] = $id;
   if ($this->child[$id]) $this->getList($tree, $id);
  }
 }
 function getValue ($id){return $this->data[$id];}
 function getLayer ($id, $space = false){
  return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];
 }
 function getParent ($id){return $this->parent[$id];}
 function getParents ($id){
  while ($this->parent[$id] != -1){
   $id = $parent[$this->layer[$id]] = $this->parent[$id];
  }
  ksort($parent);
  reset($parent);
  return $parent;
 }
 function getChild ($id){return $this->child[$id];}
 function getChilds ($id = 0){
  $child = array($id);
  $this->getList($child, $id);
  return $child;
 }
 function addNode($name,$pid){
  mysql_query("insert into $this->table (`pid`,`cname`) values ('$pid','$name')",$this->link);
 }
 function modNode($cid, $newName){
  mysql_query("update $this->table set `cname`='$newName' where `cid` = $cid",$this->link);
 }
 function delNode($cid){
  $allChilds = $this->getChilds($cid);
  $sql ='';
  if(empty($allChilds)){
   $sql = "delete from $this->table where `cid` = $cid";
  }else{
   $sql = 'delete from '.$this->table.' where `cid` in ('.implode(',',$allChilds).','.$cid.')';
  }
  mysql_query($sql,$this->link);
 }
 function moveNode($cid, $topid){
  mysql_query("update $this->table set `pid`=$topid where `cid` = $cid", $this->link);
 }
}
//函数
function back(){
 echo '<script language="JavaScript">window.location.href="test.php?" rel="external nofollow" +new Date().getTime();</script>';
 exit;
}
//声成select
function makeSelect($array,$formName){
 global $tree;
 $select = '<select name="'.$formName.'">';
 foreach ($array as $id){
  $select.='<option value="'.$id.'">'.$tree->getLayer($id, '|-').$tree->getValue($id)."</option>";
 }
 return $select.'</select>';
}
$tree = new SortClass($link,'`class`');
$op = !empty($_POST['op']) ? $_POST['op'] : $_GET['op'];
if(!empty($op)){

 if($op=='add'){
  $tree->addNode($_POST['cname'],$_POST['pid']);
  back();
 }

 if($op=='mod'){
  $tree->modNode($_POST['cid'],$_POST['cname']);
  back();
 }

 if($op=='del'){
  $tree->delNode($_GET['cid']);
  back();
 }

 if($op=='move'){
  $tree->moveNode($_POST['who'],$_POST['to']);
  back();
 }
}
$category = $tree->getChilds();
?>
 <style type="text/css">
  body{font-size:12px;}
  ul{list-style:none;}
  a{cursor:pointer;}
 </style>
 <script language="javascript">
  function $(e){return document.getElementById(e);}
  function mod(cid){
   $('cid').value=cid;
   $('op').value='mod';
   $('name').style.border='1px solid red';
  }
 </script>
 <form action="test.php" method="post">
  名称:<input type="text" id="name" name="cname" /> 添加到:<?=makeSelect($category,'pid')?><br />
  <input type="hidden" id="op" name="op" value="add" />
  <input type="hidden" id="cid" name="cid" />
  <input type="submit" value="Submit" />
 </form>
 <h3>移动分类</h3>
 <form action="test.php" method="post">
  <?=makeSelect($category,'who')?>移动到:<?=makeSelect($category,'to')?>
  <input type="hidden" id="op" name="op" value="move" />
  <input type="submit" value="Submit" />
 </form>
 <ul>
<?php
foreach ($category as $id){
 echo '<li>'.$tree->getLayer($id, '|- ').$tree->getValue($id).' <a href="test.php?op=del&cid='.$id.'" rel="external nofollow" >Del</a> <a onclick="mod('.$id.')">Edit</a> </li>';
}
?>
</ul>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP+AJAX实现无刷新注册(带用户名实时检测)
Dec 02 PHP
discuz authcode 经典php加密解密函数解析
Jul 12 PHP
php去掉字符串的最后一个字符附substr()的用法
Mar 23 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
PHP的password_hash()使用实例
Mar 17 PHP
CI框架中cookie的操作方法分析
Dec 12 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
实现php删除链表中重复的结点
Sep 27 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
Oct 17 PHP
php与阿里云短信接口接入操作案例分析
May 27 #PHP
PHP开发API接口签名生成及验证操作示例
May 27 #PHP
php+websocket 实现的聊天室功能详解
May 27 #PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
May 27 #PHP
PHP code 验证码生成类定义和简单使用示例
May 27 #PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
May 26 #PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 #PHP
You might like
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
chosen实现省市区三级联动
2018/08/16 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
js实现车辆管理系统
2020/08/26 Javascript
python 图片验证码代码
2008/12/07 Python
Python获取任意xml节点值的方法
2015/05/05 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
Python简单实现TCP包发送十六进制数据的方法
2016/04/16 Python
Python实现文件复制删除
2016/04/19 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
python之验证码生成(gvcode与captcha)
2019/01/02 Python
python中yield的用法详解——最简单,最清晰的解释
2019/04/04 Python
Python PIL库图片灰化处理
2020/04/07 Python
Python图像读写方法对比
2020/11/16 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
公司财务流程之主管工作流程
2014/03/03 职场文书
医药营销个人求职信
2014/04/12 职场文书
活动总结格式
2014/08/30 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
文明家庭事迹材料
2014/12/20 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电