无限级分类数据格式转换(无限级分类树)

1. 无限级分类数据

本文章中的算法使用的都是以下数据

$array = [
	['id' => 1, 'pid' => 0, 'name' => '河南省'],
	['id' => 2, 'pid' => 0, 'name' => '山东省'],
	['id' => 3, 'pid' => 0, 'name' => '四川省'],
	['id' => 4, 'pid' => 1, 'name' => '郑州市'],
	['id' => 5, 'pid' => 1, 'name' => '开封市'],
	['id' => 6, 'pid' => 4, 'name' => '金水区'],
	['id' => 7, 'pid' => 5, 'name' => '兰考县'],
];
2. 使用引用算法转为无限级分类树

$data = getTree($data);
/**
 * 数据格式转换
 * 将数据转为无限级分类树
 */
function getTree($arr)
{
	$refer = [];
	$tree = [];
	foreach ($arr as $k => $v) {
		//创建主键的数组引用
		$refer[$v['id']] = & $arr[$k];
	}
	foreach ($arr as $k => $v) {
		//上级id
		$pid = $v['pid'];
		if ($pid == 0) {
			//顶级栏目
			$tree[] = & $arr[$k];
		} else {
			if (isset($refer[$pid])) {
				//如果存在上级栏目,则将当前栏目添加到上级栏目的子栏目中
				$refer[$pid]['subcat'][] = & $arr[$k];
			}
		}
	}
	return $tree;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值