1. 程式人生 > >PHP實現無極限分類

PHP實現無極限分類

PHP 實現無極限分類

資料庫有以下商品分類

Id parentId name
1 0 水果
2 0 奶粉
3 1 蘋果
4 3 青蘋果
5 3 紅蘋果
6 2 進口奶粉
7 6 澳洲進口奶粉
8 0 3c數碼

用你覺得最優的演算法將以上記錄按以下格式輸出:

Id name
1 水果
3 – 蘋果
4 ----青蘋果
5 ---- 紅蘋果
2 奶粉
6 – 進口奶粉
7 ---- 澳洲進口奶粉
8 3c數碼

1.從資料庫裡面查出所有的資料,整理後格式如下:

$cat = [
	['id'=>1,'parentId'
=>0,'name'=>'水果'], ['id'=>2,'parentId'=>0,'name'=>'奶粉'], ['id'=>3,'parentId'=>1,'name'=>'蘋果'], ['id'=>4,'parentId'=>3,'name'=>'青蘋果'], ['id'=>5,'parentId'=>3,'name'=>'紅蘋果'], ['id'=>6,'parentId'=>2,'name'=>'進口奶粉'], ['id'=>7,'parentId'=>6,'name'
=>'澳洲進口奶粉'], ['id'=>8,'parentId'=>0,'name'=>'3c數碼'], ];

2.重新調整資料結構

/**
 * @param $cat 
 * @param int $parentId
 * @param array $list
 * @param int $i 
 * @return array
 */
function getCatTree($cat,$parentId=0,&$list=[],$i=0){
	foreach ($cat as $k => $v) {
		if($v['parentId'] == $parentId
){ $v['name'] = line($i,$v['name']); unset($v['parentId']); $list[] = $v; unset($cat[$k]); getCatTree($cat,$v['id'],$list,$i+1); } continue; } return $list; } /** * @param $i * @param $name * @return string */ function line($i,$name){ $line = ''; for($j=0;$j<$i;$j++){ $line .= '--'; } return $line.$name; }

3.呼叫寫好的函式

$list = getCatTree($cat);
print_r($list); 
//輸出結果如下:
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 水果
        )

    [1] => Array
        (
            [id] => 3
            [name] => --蘋果
        )

    [2] => Array
        (
            [id] => 4
            [name] => ----青蘋果
        )

    [3] => Array
        (
            [id] => 5
            [name] => ----紅蘋果
        )

    [4] => Array
        (
            [id] => 2
            [name] => 奶粉
        )

    [5] => Array
        (
            [id] => 6
            [name] => --進口奶粉
        )

    [6] => Array
        (
            [id] => 7
            [name] => ----澳洲進口奶粉
        )

    [7] => Array
        (
            [id] => 8
            [name] => 3c數碼
        )

)