Home  >  Article  >  Backend Development  >  求修改个无限分类递归函数

求修改个无限分类递归函数

WBOY
WBOYOriginal
2016-06-23 14:03:18817browse


// ========== findFather函数 START ==========     // 功能:无限级分类之找出父层的相关数据     // 参数:$classID,当前子层的编号     //          $type,0找自己 1找父亲 2找祖先 3找家谱     // 字段:classID主键,自生成 classFID父编号     //          className分类名称 classCount分类统计function findFather($classID,$type)     {       global $flist,$forefather;        define("_STR_CUT", " -> ");        $sql         = 'select * from mar_menu where id = "'.$classID.'"';       	$res1       =  _query($sql);         $row=_fetch_array($res1);        if ($row)         {            //取值            $classFID  = $row['ppid'];            $classID   = $row['id'];            $className = $row['m_title'];            //若找到祖先,即classFID为0,则将函数状态设为0            if ($classFID == '0') $type='0';         }        if ($type == '1') //找父亲         {            $type = '0'; //第二次开始函数状态为0,即循环2次             findFather($classFID,$type);             $flist = $flist . _STR_CUT . $className; //生成家谱         }        else if ($classFID != '0' AND $type == '2') //找祖先,状态type为2,祖先classFID不为0未找到         {             findFather($classFID,$type);             $flist = $flist . _STR_CUT . $className; //生成家谱         }        else if ($type == '3')         {             findFather($classFID,$type);            $flist = $flist . _STR_CUT . $className; //生成家谱         }        else if ($type == '0')         {            $forefather = $className;         }        $result = $forefather . $flist;        return $result;             }



求修改下  用循环 直接查找所有的父栏目
这儿函数 只能到3层节点  能否修改成无限的.我的数据有可能超过4层节点




















回复讨论(解决方案)

$classFID  = $row['ppid'];
            $classID   = $row['id'];
            $className = $row['m_title'];

应该是
$classFID = $row['classFID'];
            $classID   = $row['classID'];
            $className = $row['className'];

这个写错了 不好意思

$f=array();
function findFather($classID,$type){
    global $db;
    global $f;
    for($t=0;$t         $res=$db->query("select * from mar_menu where classID=$classID"); 
        findFather($res[0]['classFID'],$type-1);
        $f[]=$res[0]['className'];
        return ;      
    }
}
findFather(4,1);
echo implode("->",$f);

$conn = mysql_connect("localhost", "test", "test");mysql_select_db("test", $conn);mysql_set_charset("utf8", $conn);$res = mysql_query("select * from region");$data = array();while ($row = mysql_fetch_assoc($res)){    $data[] = $row;}print_r($data);function findParents($class_id){    global $data;    static $_tree;    foreach ($data as $key => $val)    {        if ($val['classID'] == $class_id)        {            $pid = $val['classFID'];            $_tree[] = $val;            if ($pid != 0)            {                findParents($pid);            }        }    }    return $_tree;}$rs = findParents(4);krsort($rs);print_r($rs);

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn