PHP无限极分类树

有一分类表如下,id 自增,pid父级id,name 分类名称

建表数据

CREATE TABLE `limit_tree` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `pid` int(10) unsigned NOT NULL DEFAULT '0',
  `name` varchar(64) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
idpidname
10中国
20美国
30日本
41河北省
51山西省
62华盛顿
73广岛
84沧州市
98肃宁县
105运城市
1110风陵渡镇

取出所有数据

array(
  1=>array('id'=>'1','pid'=>'0','name'=>'中国',),
  2=>array('id'=>'2','pid'=>'0','name'=>'美国',),
  3=>array('id'=>'3','pid'=>'0','name'=>'日本',),
  4=>array('id'=>'4','pid'=>'1','name'=>'河北省',),
  5=>array('id'=>'5','pid'=>'1','name'=>'山西省',),
  6=>array('id'=>'6','pid'=>'2','name'=>'华盛顿',),
  7=>array('id'=>'7','pid'=>'3','name'=>'广岛',),
  8=>array('id'=>'8','pid'=>'4','name'=>'沧州市',),
  9=>array('id'=>'9','pid'=>'8','name'=>'肃宁县',),
  10=>array('id'=>'10','pid'=>'5','name'=>'运城市',),
  11=>array('id'=>'11','pid'=>'10','name'=>'风陵渡镇',),
)

生成树方法

public static function generateTree(array $arr)
{
     $tree = [];
     foreach($arr as $row){
         if(isset($arr[$row['pid']])){
             $arr[$row['pid']]['son'][] = &$arr[$row['id']];
         }else{
             $tree[] = &$arr[$row['id']];
         }
     }
     return $tree;
 }

返回结果

Array
(
    [0] => Array
        (
            [id] => 1
            [pid] => 0
            [name] => 中国
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 4
                            [pid] => 1
                            [name] => 河北省
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 8
                                            [pid] => 4
                                            [name] => 沧州市
                                        )

                                )

                        )

                    [1] => Array
                        (
                            [id] => 5
                            [pid] => 1
                            [name] => 山西省
                            [son] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 10
                                            [pid] => 5
                                            [name] => 运城市
                                            [son] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [id] => 11
                                                            [pid] => 10
                                                            [name] => 风陵渡镇
                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 2
            [pid] => 0
            [name] => 美国
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 6
                            [pid] => 2
                            [name] => 华盛顿
                        )

                )

        )

    [2] => Array
        (
            [id] => 3
            [pid] => 0
            [name] => 日本
            [son] => Array
                (
                    [0] => Array
                        (
                            [id] => 7
                            [pid] => 3
                            [name] => 广岛
                        )

                )

        )

)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值