PHP从二维数组得到N层分类树的实现代码

公司的产品分类存在一张表内,以mid标识其父分类,需要得到有层次结构的数组,以备后续操作。

想了下,想了一会儿没想出不去重复读取数据库方法或者不需要递归的操作。

数据源:(数据要求一维key与对应value二维数组的id要一样)

array('id' => 1,'pid' => 0,'name' => '江西省'),2 => array('id' => 2,'name' => '黑龙江省'),3 => array('id' => 3,'pid' => 1,'name' => '南昌市'),4 => array('id' => 4,'pid' => 2,'name' => '哈尔滨市'),5 => array('id' => 5,'name' => '鸡西市'),6 => array('id' => 6,'pid' => 4,'name' => '香坊区'),7 => array('id' => 7,'name' => '南岗区'),8 => array('id' => 8,'pid' => 6,'name' => '和兴路'),9 => array('id' => 9,'pid' => 7,'name' => '西大直街'),10 => array('id' => 10,'pid' => 8,'name' => '东北林业大学'),11 => array('id' => 11,'pid' => 9,'name' => '哈尔滨工业大学'),12 => array('id' => 12,'name' => '哈尔滨师范大学'),13 => array('id' => 13,'name' => '赣州市'),14 => array('id' => 14,'pid' => 13,'name' => '赣县'),15 => array('id' => 15,'name' => '于都县'),16 => array('id' => 16,'pid' => 14,'name' => '茅店镇'),17 => array('id' => 17,'name' => '大田乡'),18 => array('id' => 18,'pid' => 16,'name' => '义源村'),19 => array('id' => 19,'name' => '上坝村'),);

生成树的函数

rush:PHP;"> function genTree9($items) { $tree = array(); foreach ($items as $item) if (isset($items[$item['pid']])) $items[$item['pid']]['son'][] = &$items[$item['id']]; else $tree[] = &$items[$item['id']]; return $tree; }

当然。满足特定条件下的数据,更是可以把函数缩到只有短短5行:

rush:PHP;"> function genTree5($items) { foreach ($items as $item) $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']]; return isset($items[0]['son']) ? $items[0]['son'] : array(); }

一遍循环,内存引用。省时又省空间。

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...