Vivian
2018-06-12
来源 :
阅读 1771
评论 0
摘要:本文主要向大家介绍了mysql和php无限分类数据归类输出实例,通过具体的代码向大家展示,希望对大家学习mysql有所帮助。
本文主要向大家介绍了mysql和php无限分类数据归类输出实例,通过具体的代码向大家展示,希望对大家学习mysql有所帮助。
说明在先:数据整合部分参考了网上博客;但是数据输出是自己写的,使用了递归;
数据归类解释:利用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=InnoDB DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci AUTO_INCREMENT=1 ROW_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框架
<!--?php
namespace 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,&$pision,$flag)
{
$piT = $pision;
if(reset($data)['pid']!=0) $pision .= $flag;
foreach ($data as $key => $val) {
$temp[] = $pision.$val['name'];
if (is_array($val['children'])) {
$this->recursive($val['children'],$temp,$pision,$flag);
}
}
$pision = $piT;
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"
}本文由职坐标整理并发布,了解更多内容,请关注职坐标数据库MySQL数据库频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号