算法,各種算法對一個數學很爛的人來說真是一個嚴重的打擊!!!但誰讓咱干程序這行呢(哭)。
搞了幾小時,參照 http://yuepin.com/Explore/tree.php? 該網址的說明實例,可算是明白一點,下邊代碼,給自己留個筆記。
注:因為是無限次的調用,所以我加了個判斷,在層級$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'=>'三級欄目一'),
- 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 www.CuoXIn.com
- */
- 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);
新聞熱點
疑難解答