<img src="https://github.com/stefangabos/zebrajs/blob/master/docs/images/logo.png" alt="zebrajs" align="right">
A PHP library providing an implementation of the modified preorder tree traversal algorithm
MPTT is a fast algorithm for storing hierarchical data (like categories and their subcategories) in a relational database. This is a problem that most of us have had to deal with, and for which we've used an adjacency list, where each item in the table contains a pointer to its parent and where performance will naturally degrade with each level added as more queries need to be run in order to fetch a subtree of records.
The aim of the modified preorder tree traversal algorithm is to make retrieval operations very efficient. With it you can fetch an arbitrary subtree from the database using just two queries. The first one is for fetching details for the root node of the subtree, while the second one is for fetching all the children and grandchildren of the root node.
The tradeoff for this efficiency is that updating, deleting and inserting records is more expensive, as there's some extra work required to keep the tree structure in a good state at all times. Also, the modified preorder tree traversal approach is less intuitive than the adjacency list approach because of its algorithmic flavour.
For more information about the modified preorder tree traversal method, read this excellent article called Storing Hierarchical Data in a Database.
Zebra_Mptt is a PHP library that provides an implementation of the modified preorder tree traversal algorithm making it easy to implement the MPTT algorithm in your PHP applications.
It provides methods for adding nodes anywhere in the tree, deleting nodes, moving and copying nodes around the tree and methods for retrieving various information about the nodes.
Zebra\_Mptt uses table locks making sure that database integrity is always preserved and that concurrent MySQL sessions don't compromise data integrity. Also, Zebra_Mptt uses a caching mechanism which has as result the fact that regardless of the type, or the number of retrieval operations, the database is read only once per script execution!
:books: Check out the awesome documentation!
PHP 5.0.0+, MySQL 4.1.22+
You can install Zebra_Mptt via Composer
# get the latest stable release
composer require stefangabos/zebra_mptt
# get the latest commit
composer require stefangabos/zebra_mptt:dev-master
Or you can install it manually by downloading the latest version, unpacking it, and then including it in your project
require_once 'path/to/Zebra_Mptt.php';
Notice a directory called install containing a file named mptt.sql. This file contains the SQL code that will create the table used by the class to store its data. Import or execute the SQL code using your preferred MySQL manager (like phpMyAdmin or the fantastic Adminer) into a database of your choice.
// include the Zebra_Mptt class
require 'path/to/Zebra_Mptt.php';
// instantiate a new object
$mptt = new Zebra_Mptt();
// populate the table
// add 'Food' as a topmost node
$food = $mptt->add(0, 'Food');
// 'Fruit' and 'Meat' are direct descendants of 'Food'
$fruit = $mptt->add($food, 'Fruit');
$meat = $mptt->add($food, 'Meat');
// 'Red' and 'Yellow' are direct descendants of 'Fruit'
$red = $mptt->add($fruit, 'Red');
$yellow = $mptt->add($fruit, 'Yellow');
// add a fruit of each color
$cherry = $mptt->add($red, 'Cherry');
$banana = $mptt->add($yellow, 'Banana');
// add two kinds of meat
$mptt->add($meat, 'Beef');
$mptt->add($meat, 'Pork');
// move 'Banana' to 'Meat'
$mptt->move($banana, $meat);
// get a flat array of descendants of 'Meat'
$mptt->get_children($meat);
// get a multidimensional array (a tree) of all the data in the database
$mptt->get_tree();
:books: Check out the awesome documentation!
Classes of Stefan Gabos | > | Zebra MPTT | > | Download .zip .tar.gz | > | Support forum | > | Blog | > | Latest changes |
|
|
Groups | Applications | Files |
Groups |
PHP 5 | Classes using PHP 5 specific features | View top rated classes |
Databases | Database management, accessing and searching | View top rated classes |
Data types | Modeling and manipulating data types | View top rated classes |
Applications that use this package |
If you know an application of this package, send a message to the author to add a link here.
Files |
File | Role | Description | ||
---|---|---|---|---|
docs (3 files, 2 directories) | ||||
examples (1 file) | ||||
install (1 file) | ||||
CHANGELOG.md | Data | Auxiliary data | ||
composer.json | Data | Auxiliary data | ||
license.txt | Doc. | Documentation | ||
README.md | Doc. | Documentation | ||
Zebra_Mptt.php | Class | Class source |
Files | / | docs |
File | Role | Description | ||
---|---|---|---|---|
media (2 files) | ||||
Zebra_Mptt (1 file) | ||||
elementindex_Zebra_Mptt.html | Doc. | Documentation | ||
index.html | Doc. | Documentation | ||
README.md | Doc. | Documentation |
Download all files: zebra_mptt.tar.gz zebra_mptt.zip NOTICE: if you are using a download manager program like 'GetRight', please Login before trying to download this archive.
|