工作中遇到一个需求,任意给一个结点id,求出其所有的叶子结点。
/**
* 求出单个结点下面所有叶子结点,并加入到变量中
* @param $id 结点id
* @param $data 从数据库查找出来的school_area的数据
*/
public function findLastNodes($id, $data)
{
if ($this->childCounts($id, $data) == 0) {
array_push($this->nodes, $id);
} else {
foreach ($data as $key => $value) {
if ($value['parent_id'] == $id) {
$this->findLastNodes($value['id'], $data);
}
}
}
}
/**
* @param $id 结点id
* @param $data school_area里取出来的数据
* @return int 该结点下子结点的个数
*/
public function childCounts($id, $data)
{
$i = 0;
foreach ($data as $key => $value) {
if ($value['parent_id'] == $id) {
++$i;
}
}
return $i;
}
上面的方法在一个TP类中,所以调用方法就直接用$this->funcion name的形式,对数组的保存也是这样。用到了递归。不过效率应该不高。