当前位置 : 主页 > 网络编程 > PHP >

PHP无限极分类相关代码

来源:互联网 收集:自由互联 发布时间:2021-07-03
//非递归获取所有后代分类function get_offspring($pids, $list){ $npid = array(); $offspring = array(); $has_child = true; while($has_child) { $has_child = false; foreach($list as $lk = $lv) { if(in_array($lv['pid'], $pids)) { $offs
 
//非递归获取所有后代分类
function get_offspring($pids, $list)
{
    $npid = array();
    $offspring = array();
    $has_child = true;
    while($has_child)
    {
        $has_child = false;
        foreach($list as $lk => $lv)
        {
            if(in_array($lv['pid'], $pids))
            {
                $offspring[] = $lv;
                $npid[] = $lv['cid'];
                unset($list[$lk]);
                $has_child = true;
            }
        }
        $pids = $npid;
    }
    return $offspring;
}
//利用路径字段获取后辈分类
function get_offspring($pid)
{
    $offspring = array();
    $cats = $this->getList('cat_id,cat_name,parent_id,cat_path', array(), 0, -1);
    foreach($cats as $cv)
    {
        if(in_array($pid, explode(',', $cv['cat_path'])))
        {
            $offspring[] = $cv;
        }
    }
    return $offspring;
}
//更新后辈分类路径
function update_offspring_path($pid, $ppath)
{
    if($ppath == ',')
    {
        $ppath = '';
    }
    $offspring = $this->get_offspring($pid);
  
    foreach($offspring as $ov)
    {
        $ov['cat_path'] = substr($ov['cat_path'], 0, strlen($ov['cat_path'])-1);
        $old_path = explode(',', $ov['cat_path']);
        foreach($old_path as $oldk => $oldv)
        {
            if($oldv == $pid)
            {
                break;
            }
            unset($old_path[$oldk]);
        }
        $new_path = $ppath.implode(',', $old_path).',';
        if(!$this->update(array('cat_path'=>$new_path), array('cat_id'=>$ov['cat_id'])))
        {
            return false;
        }
    }
    return true;
}
//将列表整理为树形
function get_tree_list($pid, $arr, &$r)
{
    foreach($arr as $k => $v)
    {
        if($v['parent_id'] == $pid)
        {
            if(isset($r[$pid]))//设置含有子类标记
            {
                $r[$pid]['has_child'] = 1;
            }
  
            $v['cat_path'] = trim($v['cat_path']);//计算深度
            $path_str = substr($v['cat_path'], 0, strlen($v['cat_path'])-1);
            if($path_str == '')
            {
                $v['deep'] = 0;
            }
            else
            {
                $v['deep'] = count(explode(',', $path_str));
            }
  
            $v['format'] = str_repeat(' ', 6*$v['deep']);//计算缩进
  
            $r[$v['cat_id']] = $v;//加入有序列表
  
            unset($arr[$k]);//已加入 从无序列表中剔除
  
            $this->get_tree_list($v['cat_id'], $arr, $r);
        }
    }
}
 
网友评论