search
HomeBackend DevelopmentPHP TutorialTwo methods to implement tree structure_PHP tutorial

Two methods to implement tree structure_PHP tutorial

Jul 21, 2016 pm 04:08 PM
functionitaccomplishmethodyesofstructuretransferrecursion


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]               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
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
PHP Performance Tuning for High Traffic WebsitesPHP Performance Tuning for High Traffic WebsitesMay 14, 2025 am 12:13 AM

ThesecrettokeepingaPHP-poweredwebsiterunningsmoothlyunderheavyloadinvolvesseveralkeystrategies:1)ImplementopcodecachingwithOPcachetoreducescriptexecutiontime,2)UsedatabasequerycachingwithRedistolessendatabaseload,3)LeverageCDNslikeCloudflareforservin

Dependency Injection in PHP: Code Examples for BeginnersDependency Injection in PHP: Code Examples for BeginnersMay 14, 2025 am 12:08 AM

You should care about DependencyInjection(DI) because it makes your code clearer and easier to maintain. 1) DI makes it more modular by decoupling classes, 2) improves the convenience of testing and code flexibility, 3) Use DI containers to manage complex dependencies, but pay attention to performance impact and circular dependencies, 4) The best practice is to rely on abstract interfaces to achieve loose coupling.

PHP Performance: is it possible to optimize the application?PHP Performance: is it possible to optimize the application?May 14, 2025 am 12:04 AM

Yes,optimizingaPHPapplicationispossibleandessential.1)ImplementcachingusingAPCutoreducedatabaseload.2)Optimizedatabaseswithindexing,efficientqueries,andconnectionpooling.3)Enhancecodewithbuilt-infunctions,avoidingglobalvariables,andusingopcodecaching

PHP Performance Optimization: The Ultimate GuidePHP Performance Optimization: The Ultimate GuideMay 14, 2025 am 12:02 AM

ThekeystrategiestosignificantlyboostPHPapplicationperformanceare:1)UseopcodecachinglikeOPcachetoreduceexecutiontime,2)Optimizedatabaseinteractionswithpreparedstatementsandproperindexing,3)ConfigurewebserverslikeNginxwithPHP-FPMforbetterperformance,4)

PHP Dependency Injection Container: A Quick StartPHP Dependency Injection Container: A Quick StartMay 13, 2025 am 12:11 AM

APHPDependencyInjectionContainerisatoolthatmanagesclassdependencies,enhancingcodemodularity,testability,andmaintainability.Itactsasacentralhubforcreatingandinjectingdependencies,thusreducingtightcouplingandeasingunittesting.

Dependency Injection vs. Service Locator in PHPDependency Injection vs. Service Locator in PHPMay 13, 2025 am 12:10 AM

Select DependencyInjection (DI) for large applications, ServiceLocator is suitable for small projects or prototypes. 1) DI improves the testability and modularity of the code through constructor injection. 2) ServiceLocator obtains services through center registration, which is convenient but may lead to an increase in code coupling.

PHP performance optimization strategies.PHP performance optimization strategies.May 13, 2025 am 12:06 AM

PHPapplicationscanbeoptimizedforspeedandefficiencyby:1)enablingopcacheinphp.ini,2)usingpreparedstatementswithPDOfordatabasequeries,3)replacingloopswitharray_filterandarray_mapfordataprocessing,4)configuringNginxasareverseproxy,5)implementingcachingwi

PHP Email Validation: Ensuring Emails Are Sent CorrectlyPHP Email Validation: Ensuring Emails Are Sent CorrectlyMay 13, 2025 am 12:06 AM

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

See all articles

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 Article

Hot Tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools