Home Backend Development PHP Tutorial Two methods to implement tree structure_PHP tutorial

Two methods to implement tree structure_PHP tutorial

Jul 21, 2016 pm 04:08 PM
function it accomplish method yes of structure transfer recursion


Two ways to implement a tree structure 1. Recursive method
Recursion means explicitly calling itself in a function.
Using the recursive method to realize the tree structure is characterized by faster data writing speed and slower display speed (especially obvious when the tree has many branches/levels). It is suitable for situations where the amount of written data is large and the tree structure is complex.
Data structure (take mysql as an example)

Code:---------------------------------- --------------------------------------------------
CREATE TABLE `tree1` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`parentid` tinyint(3) unsigned NOT NULL default '0',
`topic` varchar(50 ) default NULL,
PRIMARY KEY (`id`),
KEY `parentid` (`parentid`)
) TYPE=MyISAM;

INSERT INTO `tree1` (`id` , `parentid`, `topic`) VALUES
(1,0,'Tree 1'),
(2,0,'Tree 2'),
(3,0,'Tree 3' ),
(4,2,'Tree 2-1'),
(5,4,'Tree 2-1-1'),
(6,2,'Tree 2-2' ),
(7,1,'Tree 1-1'),
(8,1,'Tree 1-2'),
(9,1,'Tree 1-3'),
(10,8,'Tree 1-2-1'),
(11,7,'Tree 1-1-1'),
(12,11,'Tree 1-1- 1-1');
----------------------------------------- ---------------------------------------------


Field description
id, the id number of the record
parentid, the parent record id of the record (if it is 0, it is the root record)
topic, the display title of the record

Display program

Sequence tree:

PHP code:----------------------------------------- ------------------------------------------

< ?
/* Database connection*/
mysql_connect();
mysql_select_db('tree');

/* Recursive function displayed in tree format*/
function tree($ parentid = 0) {
/*Execute sql query to get the title and id of the record*/
$sql = "select topic,id from tree1 where parentid = $parentid order by id asc";
$ rs = mysql_query($sql);
/* Indent*/
echo("

    ");
    while($ra = mysql_fetch_row($rs)) {
    /* Display record title*/
    echo('
  • '.$ra[0].'
  • ');
    /* Recursive call*/
    tree($ra[1 ]);
    }
    echo("
");
}
tree();
?>

------ -------------------------------------------------- --------------------------


Reverse tree:

PHP code:----- -------------------------------------------------- ------------------------

/* Database connection*/
mysql_connect();
mysql_select_db('tree');

/* Recursive function for tree display*/
function tree($parentid = 0) {
/*Execute sql query to obtain the record Title and id*/
$sql = "select topic,id from tree1 where parentid = $parentid order by id desc";
$rs = mysql_query($sql);
/* Indent*/
echo("
    ");
    while($ra = mysql_fetch_row($rs)) {
    /* Display record title*/
    echo('
  • '. $ra[0].'
  • ');
                   /* Recursive call*/
                                                                                                                                       . ;");
    }
    tree();
    ?>

    ----------------------- -------------------------------------------------- -------


    Insert data program

    PHP code:---------------------- -------------------------------------------------- --------

    /* Database connection*/
    mysql_connect();
    mysql_select_db('tree');
    $sql = " insert into tree (topic,parentid) values('tree 3-1',3);";
    mysql_query($sql);
    ?>

    ------ -------------------------------------------------- -----------------------


    2. Sorting field method
    This method is implemented by adding a field to the data structure that marks the sequential position of the record in the entire tree. It is characterized by high display speed and efficiency. However, when the structure of a single tree is complex, data writing efficiency is insufficient. Moreover, when arranging in order, the algorithm for inserting and deleting records is too complex, so reverse order is usually used.

    Data structure (take mysql as an example)

    Code: ---------------------------- -------------------------------------------------- --
    CREATE TABLE `tree2` (
    `id` tinyint(3) unsigned NOT NULL auto_increment,
    `parentid` tinyint(3) unsigned NOT NULL default '0',
    `rootid` tinyint(3) unsigned NOT NULL default '0',
    `layer` tinyint(3) unsigned NOT NULL default '0',
    `orders` tinyint(3) unsigned NOT NULL default '0',
    `topic` varchar(50) default NULL,
    PRIMARY KEY (`id`),
    KEY `parentid` (`parentid`),
    KEY `rootid` (`rootid`)
    ) TYPE=MyISAM

    INSERT INTO `tree2` (`id`, `parentid`, `rootid`, `layer`, `orders`, `topic`) VALUES
    (1,0,1 ,0,0,'Tree 1'),
    (2,0,2,0,0,'Tree 2'),
    (3,0,3,0,0,'Tree 3') ,
    (4,2,2,1,2,'Tree 2-1'),
    (5,4,2,2,3,'Tree 2-1-1'),
    (6,2,2,1,1,'Tree 2-2'),
    (7,1,1,1,4,'Tree 1-1'),
    (8,1,1 ,1,2,'Tree 1-2'),
    (9,1,1,1,1,'Tree 1-3'),
    (10,8,1,2,3,' tree 1-2-1'),
    (11,7,1,2,5,'tree 1-1-1'),
    (12,11,1,3,6,'tree 1 -1-1-1');
    ----------------------------------------- ------------------------------------------


    Display program

    PHP code:----------------------------------------- ------------------------------------------

    < ?
    /* Database connection*/
    mysql_connect();
    mysql_select_db('tree');

    /* Select all root record ids */
    $sql = " select id from tree2 where parentid = 0 order by id desc";
    $rs = mysql_query($sql);
    echo("
      ");
      $lay = 0;
      while($ra = mysql_fetch_row($rs)) {
      echo("
        ");
        /* Select all records in this tree and sort by orders field*/
        $sql = "select topic,layer from tree2 where rootid = $ra[0] order by orders";
        $rs1 = mysql_query($sql);
        while($ra1 = mysql_fetch_row($rs1)) {
        /* Encement display*/
        if ($ ra1 [1] & gt; $ lay) {
        echo (str_repeat ("& lt; ul & gt;", $ ra1 [1]-$ lay);
                  }elseif($ra1[1]<$lay) {
                       echo(str_repeat("
      ",$lay-$ra1[1]));                        
                                                           Record display*/
                    //echo("$ra1[1]>$lay");
                                                                                                                                                                                                                                            //echo("$ra1[1]>$lay"); $lay = $ra1[1];
      }
      echo("
    ");
    }
    echo("
");
?> ;

---------------------------------------------- ---------------------------------------


Insert data program

PHP code:--------------------------------------------- -------------------------------------

/* Database connection*/
mysql_connect();
mysql_select_db('tree');

/* Insert root record*/
$sql = "insert into tree2 (topic) values ('tree5')";
mysql_query($sql);
$sql = "update tree2 set rootid = id where id = ".mysql_insert_id();
mysql_query($sql);

/* Insert child record*/
$parentid = 5;//Parent record id
/* Remove root record id, parent record indentation level, parent record sequence position*/
$ sql = "select rootid,layer,orders from tree2 where id = $parentid";
list($rootid,$layer,$orders) = mysql_fetch_row(mysql_query($sql));
/* Update insertion position The orders value of the last record*/
$sql = "update tree2 set orders = orders + 1 where orders > $orders";
mysql_query($sql);
/* Insert record*/
$sql = "insert into tree2 (rootid,parentid,orders,layer,topic) values ​​($rootid,$parentid,".($orders+1).",".($layer+1).",' Tree 2-1-1-2')";
mysql_query($sql);?>

http://www.bkjia.com/PHPjc/314792.html

truehttp: //www.bkjia.com/PHPjc/314792.htmlTechArticleTwo methods to implement tree structure 1. Recursive method Recursion refers to explicitly calling itself in a function. The characteristic of using the recursive method to realize the tree structure is that the writing speed of data is fast and the display speed...
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to recover deleted contacts on WeChat (simple tutorial tells you how to recover deleted contacts) How to recover deleted contacts on WeChat (simple tutorial tells you how to recover deleted contacts) May 01, 2024 pm 12:01 PM

Unfortunately, people often delete certain contacts accidentally for some reasons. WeChat is a widely used social software. To help users solve this problem, this article will introduce how to retrieve deleted contacts in a simple way. 1. Understand the WeChat contact deletion mechanism. This provides us with the possibility to retrieve deleted contacts. The contact deletion mechanism in WeChat removes them from the address book, but does not delete them completely. 2. Use WeChat’s built-in “Contact Book Recovery” function. WeChat provides “Contact Book Recovery” to save time and energy. Users can quickly retrieve previously deleted contacts through this function. 3. Enter the WeChat settings page and click the lower right corner, open the WeChat application "Me" and click the settings icon in the upper right corner to enter the settings page.

How to set font size on mobile phone (easily adjust font size on mobile phone) How to set font size on mobile phone (easily adjust font size on mobile phone) May 07, 2024 pm 03:34 PM

Setting font size has become an important personalization requirement as mobile phones become an important tool in people's daily lives. In order to meet the needs of different users, this article will introduce how to improve the mobile phone use experience and adjust the font size of the mobile phone through simple operations. Why do you need to adjust the font size of your mobile phone - Adjusting the font size can make the text clearer and easier to read - Suitable for the reading needs of users of different ages - Convenient for users with poor vision to use the font size setting function of the mobile phone system - How to enter the system settings interface - In Find and enter the "Display" option in the settings interface - find the "Font Size" option and adjust it. Adjust the font size with a third-party application - download and install an application that supports font size adjustment - open the application and enter the relevant settings interface - according to the individual

The secret of hatching mobile dragon eggs is revealed (step by step to teach you how to successfully hatch mobile dragon eggs) The secret of hatching mobile dragon eggs is revealed (step by step to teach you how to successfully hatch mobile dragon eggs) May 04, 2024 pm 06:01 PM

Mobile games have become an integral part of people's lives with the development of technology. It has attracted the attention of many players with its cute dragon egg image and interesting hatching process, and one of the games that has attracted much attention is the mobile version of Dragon Egg. To help players better cultivate and grow their own dragons in the game, this article will introduce to you how to hatch dragon eggs in the mobile version. 1. Choose the appropriate type of dragon egg. Players need to carefully choose the type of dragon egg that they like and suit themselves, based on the different types of dragon egg attributes and abilities provided in the game. 2. Upgrade the level of the incubation machine. Players need to improve the level of the incubation machine by completing tasks and collecting props. The level of the incubation machine determines the hatching speed and hatching success rate. 3. Collect the resources required for hatching. Players need to be in the game

Complete collection of excel function formulas Complete collection of excel function formulas May 07, 2024 pm 12:04 PM

1. The SUM function is used to sum the numbers in a column or a group of cells, for example: =SUM(A1:J10). 2. The AVERAGE function is used to calculate the average of the numbers in a column or a group of cells, for example: =AVERAGE(A1:A10). 3. COUNT function, used to count the number of numbers or text in a column or a group of cells, for example: =COUNT(A1:A10) 4. IF function, used to make logical judgments based on specified conditions and return the corresponding result.

Detailed explanation of C++ function recursion: application of recursion in string processing Detailed explanation of C++ function recursion: application of recursion in string processing Apr 30, 2024 am 10:30 AM

A recursive function is a technique that calls itself repeatedly to solve a problem in string processing. It requires a termination condition to prevent infinite recursion. Recursion is widely used in operations such as string reversal and palindrome checking.

C++ Recursion Advanced: Understanding Tail Recursion Optimization and Its Application C++ Recursion Advanced: Understanding Tail Recursion Optimization and Its Application Apr 30, 2024 am 10:45 AM

Tail recursion optimization (TRO) improves the efficiency of certain recursive calls. It converts tail-recursive calls into jump instructions and saves the context state in registers instead of on the stack, thereby eliminating extra calls and return operations to the stack and improving algorithm efficiency. Using TRO, we can optimize tail recursive functions (such as factorial calculations). By replacing the tail recursive call with a goto statement, the compiler will convert the goto jump into TRO and optimize the execution of the recursive algorithm.

How to choose a mobile phone screen protector to protect your mobile phone screen (several key points and tips for purchasing mobile phone screen protectors) How to choose a mobile phone screen protector to protect your mobile phone screen (several key points and tips for purchasing mobile phone screen protectors) May 07, 2024 pm 05:55 PM

Mobile phone film has become one of the indispensable accessories with the popularity of smartphones. To extend its service life, choose a suitable mobile phone film to protect the mobile phone screen. To help readers choose the most suitable mobile phone film for themselves, this article will introduce several key points and techniques for purchasing mobile phone film. Understand the materials and types of mobile phone films: PET film, TPU, etc. Mobile phone films are made of a variety of materials, including tempered glass. PET film is relatively soft, tempered glass film has good scratch resistance, and TPU has good shock-proof performance. It can be decided based on personal preference and needs when choosing. Consider the degree of screen protection. Different types of mobile phone films have different degrees of screen protection. PET film mainly plays an anti-scratch role, while tempered glass film has better drop resistance. You can choose to have better

Detailed explanation of C++ function recursion: tail recursion optimization Detailed explanation of C++ function recursion: tail recursion optimization May 03, 2024 pm 04:42 PM

Recursive definition and optimization: Recursive: A function calls itself internally to solve difficult problems that can be decomposed into smaller sub-problems. Tail recursion: The function performs all calculations before making a recursive call, which can be optimized into a loop. Tail recursion optimization condition: recursive call is the last operation. The recursive call parameters are the same as the original call parameters. Practical example: Calculate factorial: The auxiliary function factorial_helper implements tail recursion optimization, eliminates the call stack, and improves efficiency. Calculate Fibonacci numbers: The tail recursive function fibonacci_helper uses optimization to efficiently calculate Fibonacci numbers.

See all articles