zoukankan      html  css  js  c++  java
  • php无限分类方法类

    创建数据库以及表

     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?"+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.'">Del</a> <a onclick="mod('.$id.')">Edit</a> </li>';
    }
    ?>
      </ul>
  • 相关阅读:
    LeetCode153 Find Minimum in Rotated Sorted Array. LeetCode162 Find Peak Element
    LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word
    LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
    LeetCode191 Number of 1 Bits. LeetCode231 Power of Two. LeetCode342 Power of Four
    LeetCode225 Implement Stack using Queues
    LeetCode150 Evaluate Reverse Polish Notation
    LeetCode125 Valid Palindrome
    LeetCode128 Longest Consecutive Sequence
    LeetCode124 Binary Tree Maximum Path Sum
    LeetCode123 Best Time to Buy and Sell Stock III
  • 原文地址:https://www.cnblogs.com/zxf100/p/11139004.html
Copyright © 2011-2022 走看看