当需要处理树形结构的数据时,通常需要使用递归算法。在PHP中,我们可以通过递归来获取一条记录的所有上级记录的ID,也就是获取无限上级的ID,具体步骤如下:
- 准备好数据库中的数据表
假设我们需要获取一个员工记录的所有上级记录ID,我们可以使用如下的员工表:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
parent_id INT
);
其中,id表示员工ID,name表示员工姓名,parent_id表示员工的上级ID。
- 定义一个递归函数
我们可以定义一个递归函数,输入参数为员工ID,输出结果为一个包含所有上级员工ID的数组。
function getAncestors($employee_id, $db) {
$result = array();
$sql = "SELECT parent_id FROM employee WHERE id = $employee_id";
$parent_id = $db->query($sql)->fetchColumn();
if ($parent_id) {
$result[] = $parent_id;
$result = array_merge($result, getAncestors($parent_id, $db));
}
return $result;
}
在递归函数中,我们首先查询当前员工的上级ID,然后将该值添加到结果数组中。接着,我们检查该员工是否还有上级,如果有,则递归调用该函数,并将返回的结果数组合并到当前结果数组中。
- 调用递归函数
我们可以通过调用递归函数来获取员工的所有上级记录ID。
$employee_id = 5; // 员工ID
$db = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$ancestors = getAncestors($employee_id, $db);
print_r($ancestors);
假设我们要获取员工ID为5的所有上级记录ID,执行以上代码会输出如下结果:
Array
(
[0] => 3
[1] => 1
)
这表示员工ID为5的上级记录ID为3和1。
- 示例说明
假设我们有如下的员工数据:
INSERT INTO employee VALUES
(1, '张珊', NULL),
(2, '李四', 1),
(3, '王五', 1),
(4, '赵六', 2),
(5, '钱七', 3),
(6, '孙八', 3);
现在我们要获取员工ID为4的所有上级记录ID,即获取赵六的所有上级记录ID。调用以下代码即可:
$employee_id = 4; // 员工ID
$db = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$ancestors = getAncestors($employee_id, $db);
print_r($ancestors);
输出结果为:
Array
(
[0] => 2
[1] => 1
)
这表示赵六的上级记录ID为2和1,即李四和张珊。
再举一个例子,假设我们要获取员工ID为6的所有上级记录ID,即获取孙八的所有上级记录ID。调用以下代码即可:
$employee_id = 6; // 员工ID
$db = new PDO("mysql:host=localhost;dbname=test", "username", "password");
$ancestors = getAncestors($employee_id, $db);
print_r($ancestors);
输出结果为:
Array
(
[0] => 3
[1] => 1
)
这表示孙八的上级记录ID为3和1,即王五和张珊。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php递归如何获取无限上级ID - Python技术站