mysql和php无限分类 数据归类 输出

来源:互联网 发布:百知尚行 编辑:程序博客网 时间:2024/06/13 15:10

说明在先:数据整合部分参考了网上博客;但是数据输出是自己写的,使用了递归;

数据归类解释:利用pid(子级)=id(父级);让子级循环的时自己去找父级在哪儿,然后加入其中;

递归:里面需要注意,flag(|–)的问题,下一个父级兄弟要少一个flag(|–)

数据表结构:

CREATE TABLE `NewTable` (`id`  int(10) UNSIGNED NOT NULL AUTO_INCREMENT ,`pid`  int(10) UNSIGNED NOT NULL ,`name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' ,PRIMARY KEY (`id`),INDEX `pid` (`pid`) USING BTREE )ENGINE=InnoDBDEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ciAUTO_INCREMENT=1ROW_FORMAT=COMPACT;

源数据

INSERT INTO `test1` VALUES (1, 0, 'menu1');INSERT INTO `test1` VALUES (2, 0, 'menu2');INSERT INTO `test1` VALUES (3, 0, 'menu3');INSERT INTO `test1` VALUES (4, 0, 'menu4');INSERT INTO `test1` VALUES (5, 0, 'menu5');INSERT INTO `test1` VALUES (6, 0, 'menu6');INSERT INTO `test1` VALUES (7, 1, 'menu1-1');INSERT INTO `test1` VALUES (8, 1, 'menu1-2');INSERT INTO `test1` VALUES (9, 1, 'menu1-3');INSERT INTO `test1` VALUES (10, 7, 'menu7-1');INSERT INTO `test1` VALUES (11, 7, 'menu7-2');INSERT INTO `test1` VALUES (12, 7, 'menu7-3');INSERT INTO `test1` VALUES (13, 7, 'menu7-4');INSERT INTO `test1` VALUES (14, 10, 'menu10-1');INSERT INTO `test1` VALUES (15, 10, 'menu10-2');INSERT INTO `test1` VALUES (16, 10, 'menu10-3');INSERT INTO `test1` VALUES (17, 8, 'menu8-1');

php代码:基于TP5框架

<?phpnamespace app\index\controller;use app\index\model;use think\Db;use think\Debug;class Index {    public function index()    {        $res = Db::table('test1')->select();        //新数组:自身id当作key,以便下面操作        $tree = array();        foreach ($res as $key => $val) {            $tree[$val['id']] = $val;            $tree[$val['id']]['children'] = array();        }        //将有pid的元素,整合到对应的pid=id(这一步是最重要的)        foreach ($tree as $key => $val) {            if ($val['pid'] != 0) {                $tree[$val['pid']]['children'][] = &$tree[$key];//$val['pid']=$key;等价于:pid=id            }        }        //去除tree中有pid的元素,因为他们已经被归类了;        foreach ($tree as $key => $val) {            if ($val['pid']==0) continue;             unset($tree[$key]);        }        $temp = array();        $grup = '';        $flag = '|--';        $this->recursive($tree,$temp,$grup,$flag);        var_dump($temp);exit;    }    public function recursive($data,&$temp,&$division,$flag)    {        $diviT = $division;        if(reset($data)['pid']!=0) $division .= $flag;        foreach ($data as $key => $val) {            $temp[] = $division.$val['name'];            if (is_array($val['children'])) {                $this->recursive($val['children'],$temp,$division,$flag);            }        }        $division = $diviT;        return false;    }}

新数组输出如下:

array(17) {  [0] => string(5) "menu1"  [1] => string(10) "|--menu1-1"  [2] => string(13) "|--|--menu7-1"  [3] => string(17) "|--|--|--menu10-1"  [4] => string(17) "|--|--|--menu10-2"  [5] => string(17) "|--|--|--menu10-3"  [6] => string(13) "|--|--menu7-2"  [7] => string(13) "|--|--menu7-3"  [8] => string(13) "|--|--menu7-4"  [9] => string(10) "|--menu1-2"  [10] => string(13) "|--|--menu8-1"  [11] => string(10) "|--menu1-3"  [12] => string(5) "menu2"  [13] => string(5) "menu3"  [14] => string(5) "menu4"  [15] => string(5) "menu5"  [16] => string(5) "menu6"}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 月经淋淋不尽还有乌血 淋淋尽致的意思是什么 捧着一颗血淋淋的心脏图片 淋淋尽致的意思 超级驱魔人 风飘飘雨淋淋 淋湿拼音 淋湿的拼音 淋湿 梦见下雨淋湿 张瑞竹淋湿高清动图 梦见下雨被淋湿 梦到下雨淋湿自己 梦见大雨淋湿自己 梦见被雨淋湿 是什么淋湿我的眼睛是什么歌 梦到被雨淋湿 淋湿衣服的阿姨来我家避雨 二次元女生淋湿的图片 梦见下大雨被淋湿 站在飘雨的街头雨水淋湿我的 淋漓 淋漓尽致 淋漓的拼音 淋漓的意思 淋漓拼音 淋漓意思 酣畅淋漓 淋漓的读音 淋漓读音 大汗淋漓 淋漓kkw 淋漓尽致意思 淋漓尽致什么意思 月经淋漓不尽原因 酣畅淋漓意思 月经淋漓不尽4招来调理 月经淋漓不尽吃什么药 稍微热点头部大汗淋漓 稍微一动就大汗淋漓怎么补 稍微一动就大汗淋漓男生 稍微一干活就头部大汗淋漓