php树型类实例

本文实例讲述了php树型类。分享给大家供大家参考。具体分析如下:

该实例原理简单,学过数据结构的一看就明白是什么道理了,不过今天在使用时数据中出现了子节点id(71)小于父节点id(104).导致部分子节点没被存储入数组,修改了一下,实例代码如下:

代码如下:

<?php
class tree
{
    var $data = array();
    var $child = array(-1=>array());
    var $layer = array(-1=>-1);
    var $parent = array();
    var $num = array();
 
    function setnode($id, $parent, $value,$num=0)
    {
        $parent = $parent ? $parent : 0;
 
        $this->data[$id]  = $value;
        $this->num[$id]      = $num;
        if (!isset($this->child[$id])) $this->child[$id] = array();
        $this->child[$parent][] = $id;
        $this->parent[$id]  = $parent;
 
        if (!isset($this->layer[$parent]) && $parent == 0)
        {
           $this->layer[$id] = 0;
        }
        else
        {
            $this->layer[$id] = $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)
    {
   if($this->layer[$id]==0)
   {
    return $this->data[$id];
   }
   else
   {
    return $leftmar.$this->data[$id];
   }
    }
 
    function getnum($id)
    {
   return $this->num[$id];
    }
 
    function getbitvalue($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 printdata()
    {
        return $this->layer;
    }
}
?>

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

(0)

相关推荐

  • php遍历树的常用方法汇总

    本文实例讲述了php遍历树的常用方法.分享给大家供大家参考.具体如下: 一.递归的深度优先的算法: <?php define('DS', DIRECTORY_SEPARATOR); function rec_list_files($from = '.') { if(!is_dir($from)) { return array(); } $files = array(); if($dh = opendir($from)) { while(false !== ($file = readdir($dh

  • php 无限级分类,超级简单的无限级分类,支持输出树状图

    无平台限制 只需要告知id,parentid,name 即可 <?php error_reporting(E_ALL ^ E_NOTICE); class Tree { /** +------------------------------------------------ * 生成树型结构所需要的2维数组 +------------------------------------------------ * @author abc +-----------------------------

  • PHP使用递归生成文章树

    因为自己的一个技术站,以文章为主,文章有些是一个系列的,所以想把这些文章归类,同一类的在一个下面. 数据库好设计,无非用id,fatherid来进行归类,fatherid代表父类是那篇文章的id,id是文章的唯一id,层次不限,可以是两层,可以是三层.fatherid为0的表示顶层文章. php代码,主要是递归 function category_tree($fatherid){ //require_once("mysql_class/config.inc.php"); //requi

  • PHP树的深度编历生成迷宫及A*自动寻路算法实例分析

    本文实例讲述了PHP树的深度编历生成迷宫及A*自动寻路算法.分享给大家供大家参考.具体分析如下: 有一同事推荐了三思的迷宫算法,看了感觉还不错,就转成php 三思的迷宫算法是采用树的深度遍历原理,这样生成的迷宫相当的细,而且死胡同数量相对较少! 任意两点之间都存在唯一的一条通路. 至于A*寻路算法是最大众化的一全自动寻路算法 废话不多说,贴上带代码 迷宫生成类: 复制代码 代码如下: class Maze{     // Maze Create     private $_w;     priv

  • PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例

    我们经常需要在关系型数据库中保存一些树状结构数据,比如分类.菜单.论坛帖子树状回复等.常用的方法有两种: 1. 领接表的方式: 2. 预排序遍历树方式: 假设树状结构如下图: 领接表方式 主要依赖于一个 parent 字段,用于指向上级节点,将相邻的上下级节点连接起来,id 为自动递增自动,parent_id 为上级节点的 id.一目了然,"Java"是"Language"的子节点. 我们要显示树,PHP 代码也可以很直观,代码如下: 复制代码 代码如下: <

  • php从数据库查询结果生成树形列表的方法

    本文实例讲述了php从数据库查询结果生成树形列表的方法.分享给大家供大家参考.具体分析如下: 本代码可以从数据库读取数据生成一个类似于windows的资源管理器的树形列表 <?php /* Here are the database definitions (for Solid) that i use in this code. * It should not be hard to adapt it to another database. */ /* CREATE TABLE dirent_t

  • php简单实现无限分类树形列表的方法

    本文实例讲述了php简单实现无限分类树形列表的方法.分享给大家供大家参考.具体如下: $items = array( 1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'), 2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'), 3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'), 4 =

  • php通过前序遍历树实现无需递归的无限极分类

    本文实例讲述了php通过前序遍历树实现无需递归的无限极分类.分享给大家供大家参考.具体如下: 大家通常都是使用递归实现无限极分类都知道递归效率很低,下面介绍一种改进的前序遍历树算法,不适用递归实现无限极分类,在大数据量实现树状层级结构的时候效率更高. sql代码如下: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(50) NOT NULL, `lft` i

  • php实现的树形结构数据存取类实例

    本文实例讲述了php实现的树形结构数据存取类.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: <?php /**  * Tanphp framework  *  *  * @category   Tanphp  * @package    Data_structure  * @version    $Id: Tree.php 25024 2012-11-26 22:22:22 tanbo $  */   /**  * 树形结构数据存取类  *   * 用于对树形结构数据进行快速

  • PHP无限分类(树形类)

    复制代码 代码如下: <?php//模拟PHP无限分类查询结果return array(    array(        'id'=>1,        'pid'=>0,        'name'=>'主页'    ),    array(        'id'=>2,        'pid'=>0,        'name'=>'新闻'    ),    array(        'id'=>3,        'pid'=>0,   

  • php无序树实现方法

    本文实例讲述了php无序树实现方法.分享给大家供大家参考.具体如下: 运行效果如下图所示: php代码如下: <?php /* 用php写的无序树 */ class unorderedTree{ // 节点id计数器 protected $nodeId=0; // 树的深度 protected $depth=0; // 树的节点数, protected $nodesCount=0; // 树的度 @todo: 使其发挥作用 public $degree=" to be implent&qu

随机推荐