算法,各种算法对一个数学很烂的人来说真是一个严重的打击!!!但谁让咱干程序这行呢(哭)。

搞了几小时,参照 http://yuepin.com/Explore/tree.php? http://open.189works.com/product/product.htm该网址的说明实例,可算是明白一点,下边代码,给自己留个笔记。

注:因为是无限次的调用,所以我加了个判断,在层级$level=10的时候让他跳出。没有哪个正常网站会放超过10层的目录结构吧。

$yArr    = array(    1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),    2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),    3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),    4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),    5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),    6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),http://open.189works.com/product/product.htm    7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二'),    8 => array('id'=>'8','parentid'=>2,'name'=>'二级栏目三'),);/** * 无限分类 * @param array $data 原始数组 * @param int $id 当前id * @param int $layer 当前层级 */function genCate($data, $pid = 0, $level = 0){    if($level == 10) break;    static $tarr= array();    $l    = str_repeat(" ", $level);    $l    = $l.'└';    foreach($data as $row)    {        /**         * 如果父ID为当前传入的id         */        if($row['parentid'] == $pid)        {            //如果当前遍历的id不为空            $row['name']    = htmlspecialchars($l.$row['name']);            $row['level']    = $level;            $tarr[]    = $row;            genCate($data, $row['id'], $level+1);//递归调用        }    }    return $tarr;}$carr    = genCate($yArr);print_r($carr);