PHP实现无极限分类

PHP 实现无极限分类

数据库有以下商品分类

IdparentIdname
10水果
20奶粉
31苹果
43青苹果
53红苹果
62进口奶粉
76澳洲进口奶粉
803c数码

用你觉得最优的算法将以上记录按以下格式输出:

Idname
1水果
3– 苹果
4----青苹果
5---- 红苹果
2奶粉
6– 进口奶粉
7---- 澳洲进口奶粉
83c数码

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数码
        )

)

扩展

function doCat($cat,$parentId=0,&$list=[]){
	foreach ($cat as $k => $v) {
		if($v['parentId'] == $parentId){
			$list[$v['id']] = $v;
			unset($cat[$k]);
			doCat($cat,$v['id'],$list[$v['id']]['child']);
		} 
	}
	return $list;
}
$list = doCat($cat);
print_r($list)
//结果输入如下:
Array
(
    [1] => Array
        (
            [id] => 1
            [parentId] => 0
            [name] => 水果
            [child] => Array
                (
                    [3] => Array
                        (
                            [id] => 3
                            [parentId] => 1
                            [name] => 苹果
                            [child] => Array
                                (
                                    [4] => Array
                                        (
                                            [id] => 4
                                            [parentId] => 3
                                            [name] => 青苹果
                                            [child] => 
                                        )

                                    [5] => Array
                                        (
                                            [id] => 5
                                            [parentId] => 3
                                            [name] => 红苹果
                                            [child] => 
                                        )

                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 2
            [parentId] => 0
            [name] => 奶粉
            [child] => Array
                (
                    [6] => Array
                        (
                            [id] => 6
                            [parentId] => 2
                            [name] => 进口奶粉
                            [child] => Array
                                (
                                    [7] => Array
                                        (
                                            [id] => 7
                                            [parentId] => 6
                                            [name] => 澳洲进口奶粉
                                            [child] => 
                                        )

                                )

                        )

                )

        )

    [8] => Array
        (
            [id] => 8
            [parentId] => 0
            [name] => 3c数码
            [child] => 
        )

)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值