このような効果を実現したいです 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';
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...
//从数据库很容易得到这样的数组$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 ['10']
$r['10' を参照します。 ] ['02']
$r['10'][ '02'] ['01']
PHP コード
// データベースからこのような配列を取得するのは簡単です
$ar = array (
array('10', '衣服を表す'),
array(' 20', '数字を表す'),
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);
}
}
}
复杂问题用递归呗, 哪有循环万能解决方案!
按照你的提示,我向下面写了下去
但是现在问题是,我不知道怎么判断这个子分类结束了。结束了,我得加上 或者说是
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(); } }
我不知道怎么写的嘛
复杂问题用递归呗, 哪有循环万能解决方案!
用 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, ), ), ), ),)?>
为什么有这样的感概? 其实数据库的设计更加重要吧,呵呵,我虽然没弄过这方面的,但感觉数据库的设计方式会影响着这个算法
不知道有经验人士可否指出楼主所示的数据表结构是否为一个典型的无限分级表结构呢?
这样写,格式你自己控制
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 '
这所有的一二三级分类菜单都是从数据库里面读出来的吗?? 或是放在一个集合中 求代码, 谢谢..