/**
* 判断节点是否有子节点
*
* @param array $arr 要序列化的数组
* @param 父结点名称
* @param int $pid 节点ID
* @return boolean
*/
function existsChild($arr, $pname, $pid)
{
foreach ($arr as $val)
{
if($val[$pname] == $pid)
{
return true;
}
}
return false;
}
/**
* 序列化树
*
* @param array $arr 要序列化的数组
* @param 子结点的名称
* @param 父结点的名称
* @param int $pid 第一层父类ID
* @param int $repeat 分级间隔
* @return array
*/
function listClass($arr, $cname, $pname, $pid = 0, $repeat = 0)
{
if(!is_array($arr)) {
echo '传入的不是数组';
exit;
}
if(empty($cname) || empty($pname)) {
echo '子类和父类字段名不能为空';
exit;
}
foreach ($arr as $key => $val)
{
if($val[$pname] == $pid)
{
$arrChild = array();
if($pid != 0)
{
$repeat++;
}
$str = str_repeat(' ', $repeat);
$arr[$key]['space'] = $str;
if(existsChild($arr, $pname, $val[$cname]))
{
$arr[$key]['undel'] = 1;
$arrChild = listClass($arr, $cname, $pname, $val[$cname], $repeat);
}
$array[] = $arr[$key];
$array = array_merge($array, $arrChild);
if($pid != 0)
{
$repeat--;
}
}
}
if(!is_array($array))
{
return array();
}
return $array;
}
/**
* 找出一个结点的所有子节点ID
*
* @param 序列化后的数组 $arr
* @param 子节点名 $cname
* @param 父结点名 $pname
* @param 要查找的子节点ID $cid
* @param 第一层父结点 $ppid
*/
function listChildId($arr, $cname, $pname, $cid, $ppid=0)
{
if(!is_array($arr)) {
echo '传入的不是数组';
exit;
}
if(empty($cname) || empty($pname)) {
echo '子类和父类字段名不能为空';
exit;
}
$rt = 0;
$st = 0;
foreach ($arr as $key => $val)
{
if($val[$cname] == $cid) {
$rt = 1;
$pid = $val[$pname];
}
if($val[$cname] != $cid && $rt && ($val[$pname] == $pid || $val[$pname] == $ppid)) $st = 1;
if($st) {
return $cids;
}
if($rt == 1) {
$cids[] = $val[$cname];
}
}
return $cids;
}
数据库提取的无限级数据排序
最新推荐文章于 2022-03-20 08:56:13 发布