前言
既然有从父级节点获取所有的子级节点,当然也有从子级节点获取所有的父级节点,思路都是使用递归算法。
代码如下:
/**
* 根据子级节点id获取父级节点id
* @param [type] $data 列表所有数据
* @param [type] $id 当前节点的id
* $pid_arr 所有父级节点id
*/
function getParentId($data, $id)
{
static $pid_arr = [];
foreach ($data as $val) {
if ($val['id'] == $id) {
$pid_arr[] = $val['id'];
if ($val['pid'] > 0) {
getParentId($data, $val['pid']);
}
}
}
return $pid_arr;
}
if (!function_exists('getParentId')) {
/**
* 根据子级节点id获取父级节点id(不包含子级节点)
* @param [type] $data 列表所有数据
* @param [type] $id 当前节点的id
* $pid_arr 所有父级节点id
*/
function getParentId($data, $id)
{
$pid_arr = array();
foreach ($data as $v) {
if ($v['id'] == $id) {
$pid_arr[] = $v['id'];
$pid_arr = array_merge(getParentId($data, $v['pid']), $pid_arr);
}
}
return $pid_arr;
}
}