ホームページ  >  記事  >  バックエンド開発  >  助けてください。バックグラウンドに無限の分類ツリー メニュー テーブルがあります。これをフロント デスクで呼び出すにはどうすればよいですか?

助けてください。バックグラウンドに無限の分類ツリー メニュー テーブルがあります。これをフロント デスクで呼び出すにはどうすればよいですか?

WBOY
WBOYオリジナル
2016-06-23 14:39:11931ブラウズ

この投稿の最終編集者は 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# コード


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] => 代表家具                )        ))

無限分類を聞くたびに震えるのはなぜですか...

これは一体何ですか投稿者が言った、いくつかのレベルを持つ製品ですか?

無限の分類を聞くたびに震えるのはなぜですか...

これは一体何ですか?投稿者が言及したいくつかのレベルの製品ですか?

コードを重ねるだけです

方法がわかれば、グループに優れた分類プラグインを投稿できます。それほど心配する必要はありません。

無限分類について聞くたびに震えるのはなぜですか...


これは一体何ですか? 投稿者が言ったように、複数のレベルを持つ製品ですか?

それは私です。配列に渡されたものは書き込まれません。
また一つコツを学びました、笑、ありがとう
PHP コード

//データベースからそのような配列を取得するのは簡単です
$ar = array(
array('10', '服を表します'),
array('20 ' , '数字を表す'),
array('30', '家具を表す'),
array('1001', '紳士服を表す'),
array('1002', '婦人服を表す'),
array('100201', '女性の下着を表します'),
array...

静的な Web ページにしたほうが良いのではないでしょうか?笑

私もそれについて考えています。静的 Web ページにしてください。笑

这个代码有点“简单”看不懂可以指点一下吗$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 コード

// データベースからこのような配列を取得するのは簡単です
$ar = array(
array('10', 'を表します)服'),
array('20', ' 数字を表す'),
array('30', '家具を表す'),
array('1001', '紳士服を表す'),
array('1002 ', '女性の服を表す')、
配列 ('100201', '女性の下着を表す')、
配列...

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

元の文字列を 100201 とし、切り取った後は 10 02 01、$r は配列
、$p は

$r

$r ['10']
$r['10' を参照します。 ] ['02']
$r['10'][ '02'] ['01']



PHP コード

// データベースからこのような配列を取得するのは簡単です
$ar = array (
array('10', '衣服を表す'),
array(' 20', '数字を表す'),

array('30', '家具を表す'),

array('1001', 'メンズを表す服')、
配列('1002'、'女性の服を表します')、
配列('100201'、'女性の下着を表します')、
配列...とても簡単に学ぶことができます

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

以前在网上搜了些这方面的文档,感觉还是看懂了的,但是当在实际应用中,一遇到,又不会了。
$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);
    }
  }
}

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

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

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

还有一个问题,现在遍历出来的数组只有前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>'.$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 '5c69336ffbc20d23018e48b396cdd57a';
    foreach($item as $k=>$t)
      if($k == 'value') {
        echo "73de882deff7a050a357292d0a1fca94$ke……

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。