PHP實現無極限分類
阿新 • • 發佈:2018-12-22
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數碼
)
)