欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求助,我后台有一个无限级分类树菜单表,我在前台调用此表,怎么才有级数地调用出来

程序员文章站 2022-05-12 19:31:43
...
本帖最后由 xiachao2008 于 2012-05-28 18:47:53 编辑 我要实现就像这样的效果 http://www.tmall.com/?spm=1.1000386.220593.1&TBG=146280.176778.1


我要实现就像这样的效果

我应该怎么做呢,我做了以下工作

我后台的无限分类树表

CREATE  TABLE IF NOT EXISTS `www.dianxin.com`.`dx_gd_type` (  `t_id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '分类ID\n' ,  `t_name` VARCHAR(120) NULL COMMENT '购物名称分类\n' ,  `t_family_id` varchar(11) NOT NULL DEFAULT '00000000' COMMENT ' 父ID,*分类默认为0\n' ,  `t_orders` SMALLINT(5) NULL COMMENT '购物分类排序\n' ,  `t_remark` varchar(50) NULL COMMENT '备注\n' ,  PRIMARY KEY (`t_id`) )ENGINE = MyISAM DEFAULT CHARSET=utf8COMMENT = '点心购物类型表\n';


注: t_family_id分类这样的,(存的是下面这种规律的数字)
10 代表衣服20 代表数码30 代表家具二级分类1001 代表男式衣服1002 代表女式衣服三级分类100201 代表女式内衣100202 代表女式……

要实现像上图的效果,我应该怎么写这个调用代码呢?

回复讨论(解决方案)

还是我现在做得不够,

还差什么动西呢? 我要实现就像这样的效果 http://www.tmall.com/?spm=1.1000386.220593.1&TBG=146280.176778.1


我要实现就像这样的效果

我应该怎么做呢,我做了以下工作

我后台的无限分类树表

C# code


CREATE TABLE IF NOT EXISTS `www.dianxin.com`.`dx_gd_t……

本帖最后由 xuzuning 于 2012-05-28 19:18:23 编辑

//从数据库很容易得到这样的数组$ar = array(  array('10', '代表衣服'),  array('20', '代表数码'),  array('30', '代表家具'),  array('1001', '代表男式衣服'),  array('1002', '代表女式衣服'),  array('100201', '代表女式内衣'),  array('100202', '代表女式……'),);//分解出分类的层次$r = array();foreach($ar as $v) {  $p =& $r;  foreach(str_split(array_shift($v), 2) as $k) {    if(! isset($p[$k])) $p[$k] = array();    $p =& $p[$k];  }  $p['value'] = $v;}print_r($r);
得到了这样数组,接下来就太容易了吧
Array(    [10] => Array        (            [value] => Array                (                    [0] => 代表衣服                )            [01] => Array                (                    [value] => Array                        (                            [0] => 代表男式衣服                        )                )            [02] => Array                (                    [value] => Array                        (                            [0] => 代表女式衣服                        )                    [01] => Array                        (                            [value] => Array                                (                                    [0] => 代表女式内衣                                )                        )                    [02] => Array                        (                            [value] => Array                                (                                    [0] => 代表女式……                                )                        )                )        )    [20] => Array        (            [value] => Array                (                    [0] => 代表数码                )        )    [30] => Array        (            [value] => Array                (                    [0] => 代表家具                )        ))

我怎么每次一听到无限分类就一哆嗦...

这TNND到底是什么神物, 难道就是楼主所说的好几个级别的商品?

堆代码就是了.

………… 我怎么每次一听到无限分类就一哆嗦...

这TNND到底是什么神物, 难道就是楼主所说的好几个级别的商品?

堆代码就是了.

你会嘛,你在群里发一个优秀的分类插件出来,我也不用这么费心了。
我怎么每次一听到无限分类就一哆嗦...

这TNND到底是什么神物, 难道就是楼主所说的好几个级别的商品?

堆代码就是了.


我就是那一个遍历成数组不会写。
又学到一招,呵呵,感谢
PHP code

//从数据库很容易得到这样的数组
$ar = array(
array('10', '代表衣服'),
array('20', '代表数码'),
array('30', '代表家具'),
array('1001', '代表男式衣服'),
array('1002', '代表女式衣服'),
array('100201', '代表女式内衣'),
array……

直接搞成静态网页岂不是更好。哈哈

我也想啊 直接搞成静态网页岂不是更好。哈哈




这个代码有点“简单”看不懂可以指点一下吗$r = array();foreach($ar as $v) {  $p =& $r;  ??????这个的功有是做什么哟?  foreach(str_split(array_shift($v), 2) as $k) {    if(! isset($p[$k])) $p[$k] = array();    $p =& $p[$k];  ????这个的功有是做什么哟,为什么要加&  }  $p['value'] = $v;}print_r($r);唉,总之,上面的代码,我看懂一半,没有看懂一半。。可否指点一下呢?




PHP code

//从数据库很容易得到这样的数组
$ar = array(
array('10', '代表衣服'),
array('20', '代表数码'),
array('30', '代表家具'),
array('1001', '代表男式衣服'),
array('1002', '代表女式衣服'),
array('100201', '代表女式内衣'),
array……

$p =& $r;
$p =& $p[$k];
引用呀!

设原串为 100201,切割后为 10 02 01 ,$r 为数组
则 $p 依次引用
$r
$r ['10']
$r['10'] ['02']
$r['10']['02'] ['01']

PHP code

//从数据库很容易得到这样的数组
$ar = array(
array('10', '代表衣服'),
array('20', '代表数码'),
array('30', '代表家具'),
array('1001', '代表男式衣服'),
array('1002', '代表女式衣服'),
array('100201', '代表女式内衣'),
array…… 太简单拉!受教

其实我的问题是一遇到这样的代码&我就看不懂了。
特别是数组代&这样符号的,更是难理解

以前在网上搜了些这方面的文档,感觉还是看懂了的,但是当在实际应用中,一遇到,又不会了。
$p =& $r;
$p =& $p[$k];
引用呀!

设原串为 100201,切割后为 10 02 01 ,$r 为数组
则 $p 依次引用
$r
$r['10']
$r['10']['02']
$r['10']['02']['01']

如果你不反感使用 eval 函数,那么可以这样写

$r = array();foreach($ar as $v) {  $k = "r['" . join("']['", str_split(array_shift($v), 2)) ."']['value']";  eval("\$$k = \$v;");}

看来是我没有到这个级别,还是看不明白。



如果你不反感使用 eval 函数,那么可以这样写
PHP code
$r = array();
foreach($ar as $v) {
$k = "r['" . join("']['", str_split(array_shift($v), 2)) ."']['value']";
eval("\$$k = \$v;");
}

其实我只所以这么着急要弄懂这个,是因为,此数组我也不知道前台怎么遍历出来。

所以我想,得想弄懂后台是怎么生成的,才能知道前台该怎么调用,

我在前台用了三个循环,第一个循环一级分类,第二个循环一级分类,第三个循环三级分类,

如果有N个分类,那我要写N个循环哟。

感觉我的思路不对,但是又找不到其它思路了。



PHP code

//从数据库很容易得到这样的数组
$ar = array(
array('10', '代表衣服'),
array('20', '代表数码'),
array('30', '代表家具'),
array('1001', '代表男式衣服'),
array('1002', '代表女式衣服'),
array('100201', '代表女式内衣'),
array……

最重要的是,
我写了三次循环遍历的结果是错误的
PHP code

//从数据库很容易得到这样的数组
$ar = array(
array('10', '代表衣服'),
array('20', '代表数码'),
array('30', '代表家具'),
array('1001', '代表男式衣服'),
array('1002', '代表女式衣服'),
array('100201', '代表女式内衣'),
array……

递归呀!
生成的不是一个树状数组吗?

function func($ar) {
foreach($ar as $k=>$v) {
if($k == 'value') {
// 输出本级的数据
}else {
func($v);
}
}
}

复杂问题用递归呗, 哪有循环万能解决方案!

按照你的提示,我向下面写了下去

但是现在问题是,我不知道怎么判断这个子分类结束了。结束了,我得加上 或者说是