php 無限分類

 算法,各類算法對一個數學很爛的人來講真是一個嚴重的打擊!!!但誰讓咱幹程序這行呢(哭)。php

搞了幾小時,參照 http://yuepin.com/Explore/tree.php? http://open.189works.com/product/product.htm該網址的說明實例,可算是明白一點,下邊代碼,給本身留個筆記。html

注:由於是無限次的調用,因此我加了個判斷,在層級$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);
相關文章
相關標籤/搜索