PHP无限分类的类

  

复制代码 代码如下:

  <?php

  /**

  * @author        YangHuan

  * @datetime

  * @version        1.0.0

  */

  /**

  * Short description.

  *

  * Detail description

  * @author

  * @version      1.0

  * @copyright

  * @access       public

  */

  class Tree

  {

  /**

  * Description

  * @var

  * @since     1.0

  * @access    private

  */

  var $data    = array();

  /**

  * Description

  * @var

  * @since     1.0

  * @access    private

  */

  var $child    = array(-1=>array());

  /**

  * Description

  * @var

  * @since     1.0

  * @access    private

  */

  var $layer    = array(-1=>-1);

  /**

  * Description

  * @var

  * @since     1.0

  * @access    private

  */

  var $parent    = array();

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function Tree ($value)

  {

  $this->setNode(0, -1, $value);

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  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;

  if (!isset($this->layer[$parent]))

  {

  $this->layer[$id] = 0;

  }

  else

  {

  $this->layer[$id] = $this->layer[$parent] + 1;

  }

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getList (&$tree, $root= 0)

  {

  foreach ($this->child[$root] as $key=>$id)

  {

  $tree[] = $id;

  if ($this->child[$id]) $this->getList($tree, $id);

  }

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getValue ($id)

  {

  return $this->data[$id];

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getLayer ($id, $space = false)

  {

  return $space?str_repeat($space, $this->layer[$id]):$this->layer[$id];

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getParent ($id)

  {

  return $this->parent[$id];

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getParents ($id)

  {

  while ($this->parent[$id] != -1)

  {

  $id = $parent[$this->layer[$id]] = $this->parent[$id];

  }

  ksort($parent);

  reset($parent);

  return $parent;

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getChild ($id)

  {

  return $this->child[$id];

  } // end func

  /**

  * Short description.

  *

  * Detail description

  * @param      none

  * @global     none

  * @since      1.0

  * @access     private

  * @return     void

  * @update     date time

  */

  function getChilds ($id = 0)

  {

  $child = array($id);

  $this->getList($child, $id);

  return $child;

  } // end func

  } // end class

  ?>

  使用方法

  PHP代码:

  

复制代码 代码如下:

  <?php

  //new Tree(根目录的名字);

  //根目录的ID自动分配为0

  $Tree = new Tree('根目录');

  //setNode(目录ID,上级ID,目录名字);

  $Tree->setNode(1, 0, '目录1');

  $Tree->setNode(2, 0, '目录2');

  $Tree->setNode(3, 0, '目录3');

  $Tree->setNode(4, 3, '目录3.1');

  $Tree->setNode(5, 3, '目录3.2');

  $Tree->setNode(6, 3, '目录3.3');

  $Tree->setNode(7, 2, '目录2.1');

  $Tree->setNode(8, 2, '目录2.2');

  $Tree->setNode(9, 2, '目录2.3');

  $Tree->setNode(10, 6, '目录3.3.1');

  $Tree->setNode(11, 6, '目录3.3.2');

  $Tree->setNode(12, 6, '目录3.3.3');

  //getChilds(指定目录ID);

  //取得指定目录下级目录.如果没有指定目录就由根目录开始

  $category = $Tree->getChilds();

  //遍历输出

  foreach ($category as $key=>$id)

  {

  echo $Tree->getLayer($id, '|-').$Tree->getValue($id)."<br>\n";

  }

  PHP无限分类-PHP100代码

  

复制代码 代码如下:

  <?php

  //无限分类,从子类找所有父类

  //$id 子类ID

  function php100_xd($id){

  $sql="select * from fl where id='$id'";

  $q=mysql_query($sql);

  $rs=mysql_fetch_array($q);

  $rs['fid']==0 ? "" : fl($rs['fid']);

  echo $rs['name']."-";

  }

  //读取所有父类下面的子类

  //$f顶级分类从什么开始,$s样式

  function php100_dx($f=0,$s=""){

  $sql="select * from fl where fid=$f";

  $q=mysql_query($sql);

  $s=$s."-";

  while($rs=mysql_fetch_array($q)){

  echo "<br>$s".$rs['name'];

  flt($rs['id'],$s);

  }

  }