目录
回复讨论(解决方案)
'.$val["t_name"].'
首页 后端开发 php教程 求助,我后台有一个无限级分类树菜单表,我在前台调用此表,怎么才有级数地调用出来

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

Jun 23, 2016 pm 02:39 PM

本帖最后由 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);
}
}
}

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

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

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



还有一个问题,现在遍历出来的数组只有前3个元素 大分类一个,二维分类一个 三级分类一个。
可以帮我看看问题在什么地方吗?

别外,我还想问一个问题,我数据库里得到源数组,我用什么函数输出字符串来,人家拿着就可以用这个数组?
	public function func($arr,$count,$beforcount,$spList){		foreach($arr as $key => $val){			if( $key == 'value') {					if($count==1){					$html .= '<div class="right_nav" id="menu_'.$val["t_family_id"].'">';				} else if($count==2 ){					$html .= '<dt class="lef"><h1 id="val-t-name">'.$val["t_name"].'</h1></dt><dd>';				} else if( $count==3 ){					$html .= '<a href="">'.$val["t_name"].'</a>';					}				$spList = array_merge($spList, array($html));				array_shift($arr);								} else {				$beforcount = $count;				$count++;				$this->func($val,$count,$beforcount,$spList);			}		}		if(count($arr)==0){			$s_html = '';			foreach($spList as $key  => $val){				$s_html = $s_html.$val;			}			echo "<pre class="brush:php;toolbar:false">";print_r($spList);exit();		}	}
登录后复制


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

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

我不知道怎么写的嘛

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

用 var_export(数组) 得到的是 php 代码,拿来就能用

哦,感谢
我上面的遍历方法是不是又错了。

用 var_export(数组) 得到的是 php 代码,拿来就能用

其实数据库的设计更加重要吧,呵呵,我虽然没弄过这方面的,但感觉数据库的设计方式会影响着这个算法

不知道有经验人士可否指出楼主所示的数据表结构是否为一个典型的无限分级表结构呢?

哦,感谢
我上面的遍历方法是不是又错了。
你给出用 var_export(数组) 得到的结果
给你看看

<?phparray (  10 =>   array (    'value' =>     array (      't_id' => '4092',      't_name' => '女装',      't_family_id' => '10',      't_orders' => NULL,      't_remark' => NULL,    ),    '01' =>     array (      'value' =>       array (        't_id' => '4099',        't_name' => '上装',        't_family_id' => '1001',        't_orders' => NULL,        't_remark' => NULL,      ),      '01' =>       array (        'value' =>         array (          't_id' => '4123',          't_name' => 'T恤/卫衣',          't_family_id' => '100101',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '02' =>       array (        'value' =>         array (          't_id' => '4124',          't_name' => '针织衫/毛衣',          't_family_id' => '100102',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '03' =>       array (        'value' =>         array (          't_id' => '4125',          't_name' => '衬衫/雪纺衫',          't_family_id' => '100103',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '04' =>       array (        'value' =>         array (          't_id' => '4126',          't_name' => '小西服/小外套',          't_family_id' => '100104',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '05' =>       array (        'value' =>         array (          't_id' => '4127',          't_name' => '风衣/呢大衣',          't_family_id' => '100105',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '06' =>       array (        'value' =>         array (          't_id' => '4128',          't_name' => '背心/吊带衫',          't_family_id' => '100106',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '07' =>       array (        'value' =>         array (          't_id' => '4129',          't_name' => '马甲',          't_family_id' => '100107',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '08' =>       array (        'value' =>         array (          't_id' => '4130',          't_name' => '棉衣/棉服',          't_family_id' => '100108',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '09' =>       array (        'value' =>         array (          't_id' => '4131',          't_name' => '羽绒服',          't_family_id' => '100109',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      10 =>       array (        'value' =>         array (          't_id' => '4132',          't_name' => '皮衣/皮草',          't_family_id' => '100110',          't_orders' => NULL,          't_remark' => NULL,        ),      ),    ),    '02' =>     array (      'value' =>       array (        't_id' => '4100',        't_name' => '下装',        't_family_id' => '1002',        't_orders' => NULL,        't_remark' => NULL,      ),      '01' =>       array (        'value' =>         array (          't_id' => '4133',          't_name' => '裤子',          't_family_id' => '100201',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '02' =>       array (        'value' =>         array (          't_id' => '4134',          't_name' => '牛仔裤',          't_family_id' => '100202',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '03' =>       array (        'value' =>         array (          't_id' => '4135',          't_name' => '裤袜/丝袜/打底裤',          't_family_id' => '100203',          't_orders' => NULL,          't_remark' => NULL,        ),      ),    ),    '03' =>     array (      'value' =>       array (        't_id' => '4101',        't_name' => '裙',        't_family_id' => '1003',        't_orders' => NULL,        't_remark' => NULL,      ),      '01' =>       array (        'value' =>         array (          't_id' => '4136',          't_name' => '连衣裙',          't_family_id' => '100301',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '02' =>       array (        'value' =>         array (          't_id' => '4137',          't_name' => '半身裙',          't_family_id' => '100302',          't_orders' => NULL,          't_remark' => NULL,        ),      ),    ),  ),  20 =>   array (    'value' =>     array (      't_id' => '4093',      't_name' => '男装',      't_family_id' => '20',      't_orders' => NULL,      't_remark' => NULL,    ),    '01' =>     array (      'value' =>       array (        't_id' => '4102',        't_name' => '上装',        't_family_id' => '2001',        't_orders' => NULL,        't_remark' => NULL,      ),      '01' =>       array (        'value' =>         array (          't_id' => '4138',          't_name' => 'T恤',          't_family_id' => '200101',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '02' =>       array (        'value' =>         array (          't_id' => '4139',          't_name' => '衬衫',          't_family_id' => '200102',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '03' =>       array (        'value' =>         array (          't_id' => '4140',          't_name' => '外套',          't_family_id' => '200103',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '04' =>       array (        'value' =>         array (          't_id' => '4141',          't_name' => 'POLO衫',          't_family_id' => '200104',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '05' =>       array (        'value' =>         array (          't_id' => '4142',          't_name' => '针织衫/毛衣',          't_family_id' => '200105',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '06' =>       array (        'value' =>         array (          't_id' => '4143',          't_name' => '卫衣',          't_family_id' => '200106',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '07' =>       array (        'value' =>         array (          't_id' => '4144',          't_name' => '羽绒服',          't_family_id' => '200107',          't_orders' => NULL,          't_remark' => NULL,        ),      ),    ),    '02' =>     array (      'value' =>       array (        't_id' => '4103',        't_name' => '下装',        't_family_id' => '2002',        't_orders' => NULL,        't_remark' => NULL,      ),      '01' =>       array (        'value' =>         array (          't_id' => '4145',          't_name' => '裤子',          't_family_id' => '200201',          't_orders' => NULL,          't_remark' => NULL,        ),      ),    ),    '03' =>     array (      'value' =>       array (        't_id' => '4104',        't_name' => '配件',        't_family_id' => '2003',        't_orders' => NULL,        't_remark' => NULL,      ),      '01' =>       array (        'value' =>         array (          't_id' => '4146',          't_name' => '男鞋',          't_family_id' => '200301',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '02' =>       array (        'value' =>         array (          't_id' => '4147',          't_name' => '运动鞋',          't_family_id' => '200302',          't_orders' => NULL,          't_remark' => NULL,        ),      ),      '03' =>       array (        'value' =>         array (          't_id' => '4148',          't_name' => '箱包票夹',          't_family_id' => '200303',          't_orders' => NULL,          't_remark' => NULL,        ),      ),    ),  ),)?>
登录后复制

用 var_export(数组) 得到的是 php 代码,拿来就能用
登录后复制

为什么有这样的感概? 其实数据库的设计更加重要吧,呵呵,我虽然没弄过这方面的,但感觉数据库的设计方式会影响着这个算法

不知道有经验人士可否指出楼主所示的数据表结构是否为一个典型的无限分级表结构呢?

这样写,格式你自己控制

function func($ar) {  if(! is_array($ar)) return;  foreach($ar as $key=>$item) {    echo '<dl>';    foreach($item as $k=>$t)      if($k == 'value') {        echo "<dt>$key</dt>";        foreach($t as $v) echo "<dd>$v</dd>";      }else func($t);    echo '</dl>';  }}
登录后复制

唉,还是没有看懂

不过你上面的提示,写了4个循环把他遍历出来了,
以后有时间,在来学习。。。

感谢

这样写,格式你自己控制
PHP code
function func($ar) {
  if(! is_array($ar)) return;
  foreach($ar as $key=>$item) {
    echo '

';
    foreach($item as $k=>$t)
      if($k == 'value') {
        echo "
$ke……

这所有的一二三级分类菜单都是从数据库里面读出来的吗??  或是放在一个集合中  求代码,   谢谢..

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

11个最佳PHP URL缩短脚本(免费和高级) 11个最佳PHP URL缩短脚本(免费和高级) Mar 03, 2025 am 10:49 AM

长URL(通常用关键字和跟踪参数都混乱)可以阻止访问者。 URL缩短脚本提供了解决方案,创建了简洁的链接,非常适合社交媒体和其他平台。 这些脚本对于单个网站很有价值

Instagram API简介 Instagram API简介 Mar 02, 2025 am 09:32 AM

在Facebook在2012年通过Facebook备受瞩目的收购之后,Instagram采用了两套API供第三方使用。这些是Instagram Graph API和Instagram Basic Display API。作为开发人员建立一个需要信息的应用程序

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

构建具有Laravel后端的React应用程序:第2部分,React 构建具有Laravel后端的React应用程序:第2部分,React Mar 04, 2025 am 09:33 AM

这是有关用Laravel后端构建React应用程序的系列的第二个也是最后一部分。在该系列的第一部分中,我们使用Laravel为基本的产品上市应用程序创建了一个RESTFUL API。在本教程中,我们将成为开发人员

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

宣布 2025 年 PHP 形势调查 宣布 2025 年 PHP 形势调查 Mar 03, 2025 pm 04:20 PM

2025年的PHP景观调查调查了当前的PHP发展趋势。 它探讨了框架用法,部署方法和挑战,旨在为开发人员和企业提供见解。 该调查预计现代PHP Versio的增长

See all articles