利用数据库表实现无限级分类

本文介绍了一种利用数据库表实现无限级分类的方法,通过id、name、pid和path字段设计,详细解释了如何构建和排序分类树状结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php

/*
	利用数据库表实现无限级分类
	数据库表的设计思路:

	id		name		pid		path
	1		java		0		0
	2		php		0		0
	3		java基础	        1		0-1
	4		php基础		2		0-2
	5		java数组        3		0-1-3
	6		php变量		4		0-2-4

	说明:
	pid  父类id
	path 整个分类的路径   父类的id-子类的id
	如果插入新的数据path列则可以父的path+新的id
*/

//模拟数据
$data = array(
	array(
		'id' => 1,
		'name' => 'java',
		'pid' => 0,
		'path' => '0'
	),
	array(
		'id' => 2,
		'name' => 'php',
		'pid' => 0,
		'path' => '0'
	),
	array(
		'id' => 3,
		'name' => 'java基础',
		'pid' => 1,
		'path' => '0-1'
	),
	array(
		'id' => 4,
		'name' => 'php基础',
		'pid' => 2,
		'path' => '0-2'
	),
	array(
		'id' => 5,
		'name' => 'java数组',
		'pid' => 3,
		'path' => '0-1-3'
	),
	array(
		'id' => 6,
		'name' => 'php变量',
		'pid' => 4,
		'path' => '0-2-4'
	),
);

/*
echo '<pre>';
print_r($data);
echo '</pre>';
*/

//设置分级字段
foreach($data as &$row) {
	//计算-出现的个数
	$num = substr_count($row['path'],'-');
	if($row['pid'] > 0) {
		//设置前缀字符  |--
		$rep = '|'.str_repeat('--',$num);
	}else {
		$rep = '';	
	}
	
	//在数组里设置一个新的字段,存储分级的结果
	$row['tree'] = $rep.$row['name'];
}

//取得分级的排序数组
/*
	思路:用path+id 取得一个数值。利用此数值来排序
	Array ( 
			[0] => 0-1 
			[1] => 0-2 
			[2] => 0-1-3 
			[3] => 0-2-4 
			[4] => 0-1-3-5 
			[5] => 0-2-4-6 )
*/
foreach($data as $row2) {
	$arr[] = $row2['path'].'-'.$row2['id'];
}


//排序
array_multisort($arr, $data);//第二个数组根据对应第一个数组后也进行排序。 

/*
	$arr排序后的结果:
	Array ( [0] => 0-1 
			[1] => 0-1-3 
			[2] => 0-1-3-5
			[3] => 0-2 
			[4] => 0-2-4 
			[5] => 0-2-4-6 )
	
*/

//取得排序后的分级结果
foreach($data as $row3) {
	echo $row3['tree'].'<br/>';
}

/*
java
|--java基础
|----java数组
php
|--php基础
|----php变量
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值