目次
ディスカッションに返信(解決策)
ホームページ バックエンド開発 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# コード


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);
}
}
}

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

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

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



还有一个问题,现在遍历出来的数组只有前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 '

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

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

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

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

2012年のFacebookによる有名な買収に続いて、Instagramはサードパーティの使用のために2セットのAPIを採用しました。これらはInstagramグラフAPIとInstagram Basic Display APIです。

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します 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アプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 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は効率的なexecuを促進します

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 Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

See all articles