在 PHP 中实现树形结构可以使用以下几种方法:
- 多维数组:通过多维数组来实现树形结构,数组的键可以表示节点的 ID,数组的值可以表示节点的信息。使用数组嵌套的方式建立父子关系。
$tree = array(
array("id" => 1, "name" => "节点一", "parent_id" => 0),
array("id" => 2, "name" => "节点二", "parent_id" => 1),
array("id" => 3, "name" => "节点三", "parent_id" => 1),
array("id" => 4, "name" => "节点四", "parent_id" => 2),
array("id" => 5, "name" => "节点五", "parent_id" => 3),
array("id" => 6, "name" => "节点六", "parent_id" => 4),
);
- 对象:通过对象来表示树形结构,每一个对象都有一个 parent 属性和一个 children 属性,分别表示父节点和子节点。
class TreeNode {
public $id;
public $name;
public $parent = null;
public $children = array();
public function __construct($id, $name, $parent) {
$this->id = $id;
$this->name = $name;
$this->parent = $parent;
}
}
$node1 = new TreeNode(1, "节点一", null);
$node2 = new TreeNode(2, "节点二", $node1);
$node3 = new TreeNode(3, "节点三", $node1);
$node4 = new TreeNode(4, "节点四", $node2);
$node5 = new TreeNode(5, "节点五", $node3);
$node6 = new TreeNode(6, "节点六", $node4);
- 嵌套集合模型:通过两个额外的字段(左偏移和右偏移)来表示树形结构。每个节点都有一个左偏移和右偏移,左偏移表示该节点之前节点的总数,右偏移表示该节点之后节点的总数。
CREATE TABLE tree (
id INT PRIMARY KEY,
name VARCHAR(255),
lft INT NOT NULL,
rgt INT NOT NULL,
parent_id INT
);
INSERT INTO tree (id, name, lft, rgt, parent_id) VALUES
(1, "节点一", 1, 12, NULL),
(2, "节点二", 2, 7, 1),
(3, "节点三", 8, 11, 1),
(4, "节点四", 3, 6, 2),
(5, "节点五", 9, 10, 3),
(6, "节点六", 4, 5, 4);