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一些服务器端特性的配置加强php的安全
Oct 09 PHP
PHP读写文件的方法(生成HTML)
Nov 27 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
php中session退出登陆问题
Feb 27 PHP
Zend Framework教程之连接数据库并执行增删查的方法(附demo源码下载)
Mar 21 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
Apr 07 PHP
ThinkPHP打水印及设置水印位置的方法
Oct 14 PHP
php生成与读取excel文件
Oct 14 PHP
PHP读取Excel类文件
May 15 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
一次因composer错误使用引发的问题与解决
Mar 06 PHP
Laravel 连接(Join)示例
Oct 16 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中设置、使用、删除Cookie的解决方法
2013/05/06 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP include任意文件或URL介绍
2014/04/29 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
Yii2创建表单(ActiveForm)方法详解
2016/07/23 PHP
laravel批量生成假数据的方法
2019/10/09 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
JSQL  一个 web DB 的封装
2010/05/05 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
AngularJS语法详解
2015/01/23 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
使用async-validator编写Form组件的方法
2018/01/10 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
Tensorflow之Saver的用法详解
2018/04/23 Python
tensorflow 恢复指定层与不同层指定不同学习率的方法
2018/07/26 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python实现彩色图转换成灰度图
2019/01/15 Python
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
师范毕业生自荐信
2013/10/17 职场文书
机械设计专业应届生求职信
2013/11/21 职场文书
警示教育活动总结
2014/05/05 职场文书
商务经理岗位职责
2014/07/30 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
单位介绍信格式
2015/01/31 职场文书
道德与公民自我评价
2015/03/09 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
承诺书应该怎么写?
2019/09/10 职场文书