ThinkPHP中:使用递归写node_merge()函数
需求描述:
现有一个节点集合
可以视为一个二维数组
1 array(5) { 2 [0] => array(4) { 3 ["id"] => string(1) "1" 4 ["name"] => string(5) "Admin" 5 ["title"] => string(12) "后台应用" 6 ["pid"] => string(1) "0" 7 } 8 [1] => array(4) { 9 ["id"] => string(1) "2" 10 ["name"] => string(5) "Index" 11 ["title"] => string(12) "前端应用" 12 ["pid"] => string(1) "0" 13 } 14 [2] => array(4) { 15 ["id"] => string(1) "3" 16 ["name"] => string(5) "Index" 17 ["title"] => string(12) "后台首页" 18 ["pid"] => string(1) "1" 19 } 20 [3] => array(4) { 21 ["id"] => string(1) "4" 22 ["name"] => string(10) "MsgManager" 23 ["title"] => string(12) "帖子管理" 24 ["pid"] => string(1) "1" 25 } 26 [4] => array(4) { 27 ["id"] => string(1) "5" 28 ["name"] => string(4) "Rbac" 29 ["title"] => string(10) "RBAC权限" 30 ["pid"] => string(1) "1" 31 } 32 }
pid、level字段解释:
pid表示父级的id。取值范围{0,1,2,3,... ,n,...}
pid的值为0,表示这条记录不属于任何其他记录。
pid的值为1,表示这条记录属于id为1的记录。即为id为1的记录的子记录。
pid的值为2,表示这条记录属于id为2的记录。即为id为2的记录的子记录。
......
以此类推。
level表示层次、级别。取值范围{1,2,3},即为3个层次、或者是3个级别
level的值为1,表示第一层次,最高层次级,最高级别。
level的值为2,表示第二层次。
level的值为3,表示第三层次。
例如,如果level=1代表导航栏中的首页、公司部门、产品介绍等等
那么,level=2就代表部门A、部门B、...;产品A、产品B、产品C、...
这样,仅仅靠一个二维表,就能保存下各条记录的归属关系。
但是,为了使用foreach嵌套的方式循环输出有层次的数据,我们需要把原始的二维数组,按照归属关系组合到一起。
形如:一个多维数组
1 array(2) { 2 [0] => array(5) { 3 ["id"] => string(1) "1" 4 ["name"] => string(5) "Admin" 5 ["title"] => string(12) "后台应用" 6 ["pid"] => string(1) "0" 7 ["child"] => array(3) { 8 [0] => array(5) { 9 ["id"] => string(1) "3" 10 ["name"] => string(5) "Index" 11 ["title"] => string(12) "后台首页" 12 ["pid"] => string(1) "1" 13 ["child"] => array(0) { 14 } 15 } 16 [1] => array(5) { 17 ["id"] => string(1) "4" 18 ["name"] => string(10) "MsgManager" 19 ["title"] => string(12) "帖子管理" 20 ["pid"] => string(1) "1" 21 ["child"] => array(0) { 22 } 23 } 24 [2] => array(5) { 25 ["id"] => string(1) "5" 26 ["name"] => string(4) "Rbac" 27 ["title"] => string(10) "RBAC权限" 28 ["pid"] => string(1) "1" 29 ["child"] => array(0) { 30 } 31 } 32 } 33 } 34 [1] => array(5) { 35 ["id"] => string(1) "2" 36 ["name"] => string(5) "Index" 37 ["title"] => string(12) "前端应用" 38 ["pid"] => string(1) "0" 39 ["child"] => array(0) { 40 } 41 } 42 }