PHP無限極分類相關代碼

cp5m 9年前發布 | 1K 次閱讀 PHP

 
//非遞歸獲取所有后代分類
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);
    }
}

}

</pre>

 本文由用戶 cp5m 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!