请教诸位高手 怎么做这段程序??? 为什么要建两个表呢?在一个表内就可以做出来了呀,一个产品类有一个父id,一个子id,从属关系即可确定。对应查找就可以了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你看看这个类表CREATE TABLE `web_board` (`boardid` tinyint(4) unsigned NOT NULL auto_increment,`boardname` varchar(20) NOT NULL default '',`boardnick` varchar(20) NOT NULL default '',`p_b_id` tinyint(4) unsigned NOT NULL default '0',UNIQUE KEY `boardid` (`boardid`,`boardname`)) TYPE=MyISAM AUTO_INCREMENT=19 ;可以用其他方式文件tree.class.php[PHP:--------------------------------------------------------------------------------<?php class Tree { /* *$tree_t $tree_c $tree_l $tree_k够成树状结构的图形 */ var $tree_t="┝";//节点,下面还有同深度的节点 var $tree_c="┕";//节点,下面还没有同深度的节点 var $tree_l="│";//非节点,过渡,下面有父节点同深度的节点 var $tree_k=" ";//非节点,过渡,下面没有父节点同深度的节点 /* $tree_f,$tree_a和$tree_m 可以使用[treeid] [ptreeid] [treename] [treenick] [allvalue] 四个字串代替相应的变量 */ var $tree_m="[treename]([treenick])";//主体 var $tree_f="<option value=[treeid]>";//前缀 var $tree_a="</option>";//后缀 /*$outstr 输出树状目录结构的字符串*/ var $outstr; /*设定显示*/ function setTree ($t,$c,$l,$k,$m,$f,$a){ if (!empty($t)) { $this->tree_t=$t; } if (!empty($c)) { $this->tree_c=$c; } if (!empty($l)) { $this->tree_l=$l; } if (!empty($k)) { $this->tree_k=$k; } if (!empty($f)) { $this->tree_f=$f; } if (!empty($a)) { $this->tree_a=$a; } if (!empty($m)) { $this->tree_m=$m; } } /*检索表生成数组*/ function _list_tree($table) { $query="select * from $table order by p_b_id"; $result=mysql_query($query); while ($row=mysql_fetch_assoc($result)) { $arr_tree[$row["p_b_id"]][$row["boardid"]]=$row["p_b_id"]."|".$row["boardid"]."|".$row["boardname"]."|".$row["boardnick"]; } return ($arr_tree); } /* *_echo_o_board($p_b_id,$arrboard,&$q_str,$i) *生成树状目录结构 *$p_b_id 父目录id *$arrboard _list_board()生成的数组 *$q_str数组 记录显示树状目录结构$tree_l和$tree_k的数组 *$i深度 *$kk同一层内的序号0开始 *使用递归生成树状结构 */ function _echo_o_board($p_t_id,$arrtree,&$q_str,$i) { if (is_array($arrtree[$p_t_id])) { $len=count($arrtree[$p_t_id]); $kk=0; foreach($arrtree[$p_t_id] as $key=>$var) { list($ptreeid,$treeid,$treename,$treenick)=explode("|",$var);//分割数组信息 /* 生成结构 */ if ($kk<$len-1) { $end_str=$this->tree_t; $q_str[$i]=$this->tree_l; } else { $end_str=$this->tree_c; $q_str[$i]=$this->tree_k; } if ($p_t_id==0) { //检索的是最顶层目录 $i=0; } $r_str=array("treeid"=>$treeid,"ptreeid"=>$ptreeid,"treename"=>$treename,"treenick"=>$treenick,"allvalue"=>$var); $this->outstr.=$this->_replace($this->tree_f,$r_str); for ($k=0;$k<$i;$k++) { $this->outstr.=$q_str[$k]; } $this->outstr.=$end_str; $this->outstr.=$this->_replace($this->tree_m,$r_str); $this->outstr.=$this->_replace($this->tree_a,$r_str); $i++; $this->_echo_o_board($key,$arrtree,&$q_str,$i); $kk++;//移到下一个 $i--;//恢复$i /* 生成结构完成 */ } } else { /*检索到最底层返回*/ return; } } /*置换定义的字串*/ function _replace($str,$r_str) { foreach ($r_str as $key=>$var) { $str=str_replace("[$key]",$var,$str); } return($str); } /*echo_tree()显示树状目录*/ function echo_tree() { echo $this->outstr; } /* *list_select_tree()和list_tree()是两个默认的树状目录结构 */ function list_select_tree() { $table=s_table_n("board"); $arrboard=$this->_list_tree($table); $this->outstr="<select name=p_b_id class=boardsele>"; $this->outstr.="<option value=0><--顶层板块--></option>"; $this->_echo_o_board(0,$arrboard,$q_str,0); $this->outstr.="</select>"; return ($outstr); } function list_tree() { $table=s_table_n("board"); $arrboard=$this->_list_tree($table); $t="<img src=./images/tree_t.gif align=absmiddle width=20 height=20>"; $c="<img src=./images/tree_c.gif align=absmiddle width=20 height=20>"; $l="<img src=./images/tree_l.gif align=absmiddle width=20 height=20>"; $k="☆";//"<img src=./images/tree_k.gif align=absmiddle width=20 height=20>"; $m="<input type=\"radio\" name=\"board\" value=\"[allvalue]\" width=20 height=20>[treename]([treenick])"; $f="【★】"; $a="<br>\n"; $this->setTree ($t,$c,$l,$k,$m,$f,$a); $this->_echo_o_board(0,$arrboard,$q_str,0); } }?> 关于PHP 获取信息问题 PHP怎么将数组的内容循环成 “链接”+“下拉选择”的样式 PHP新手问:build path与include path什么区别? php除访问mysql外,怎样可以生成$result数据集? 关于获取目录下文件数的问题 php wap 请问有高手想写PHP书籍么 如何使网站首页成为静态页面 class.WMThumbnail.inc.php 的问题 怎样使一行内容,显示不完用....代替! 文字变成乱码是怎么回事? 这样的变量怎么传递!
CREATE TABLE `web_board` (
`boardid` tinyint(4) unsigned NOT NULL auto_increment,
`boardname` varchar(20) NOT NULL default '',
`boardnick` varchar(20) NOT NULL default '',
`p_b_id` tinyint(4) unsigned NOT NULL default '0',
UNIQUE KEY `boardid` (`boardid`,`boardname`)
) TYPE=MyISAM AUTO_INCREMENT=19 ;
可以用其他方式
文件tree.class.php
[PHP:--------------------------------------------------------------------------------
<?php
class Tree {
/*
*$tree_t $tree_c $tree_l $tree_k够成树状结构的图形
*/
var $tree_t="┝";//节点,下面还有同深度的节点
var $tree_c="┕";//节点,下面还没有同深度的节点
var $tree_l="│";//非节点,过渡,下面有父节点同深度的节点
var $tree_k=" ";//非节点,过渡,下面没有父节点同深度的节点
/*
$tree_f,$tree_a和$tree_m 可以使用[treeid] [ptreeid] [treename] [treenick] [allvalue]
四个字串代替相应的变量
*/
var $tree_m="[treename]([treenick])";//主体
var $tree_f="<option value=[treeid]>";//前缀
var $tree_a="</option>";//后缀
/*$outstr 输出树状目录结构的字符串*/
var $outstr;
/*设定显示*/
function setTree ($t,$c,$l,$k,$m,$f,$a){
if (!empty($t)) {
$this->tree_t=$t;
}
if (!empty($c)) {
$this->tree_c=$c;
}
if (!empty($l)) {
$this->tree_l=$l;
}
if (!empty($k)) {
$this->tree_k=$k;
}
if (!empty($f)) {
$this->tree_f=$f;
}
if (!empty($a)) {
$this->tree_a=$a;
}
if (!empty($m)) {
$this->tree_m=$m;
}
}
/*检索表生成数组*/
function _list_tree($table) {
$query="select * from $table order by p_b_id";
$result=mysql_query($query);
while ($row=mysql_fetch_assoc($result)) {
$arr_tree[$row["p_b_id"]][$row["boardid"]]=$row["p_b_id"]."|".$row["boardid"]."|".$row["boardname"]."|".$row["boardnick"];
}
return ($arr_tree);
}
/*
*_echo_o_board($p_b_id,$arrboard,&$q_str,$i)
*生成树状目录结构
*$p_b_id 父目录id
*$arrboard _list_board()生成的数组
*$q_str数组 记录显示树状目录结构$tree_l和$tree_k的数组
*$i深度
*$kk同一层内的序号0开始
*使用递归生成树状结构
*/
function _echo_o_board($p_t_id,$arrtree,&$q_str,$i) {
if (is_array($arrtree[$p_t_id])) {
$len=count($arrtree[$p_t_id]);
$kk=0;
foreach($arrtree[$p_t_id] as $key=>$var) {
list($ptreeid,$treeid,$treename,$treenick)=explode("|",$var);//分割数组信息
/*
生成结构
*/
if ($kk<$len-1) {
$end_str=$this->tree_t;
$q_str[$i]=$this->tree_l;
} else {
$end_str=$this->tree_c;
$q_str[$i]=$this->tree_k;
}
if ($p_t_id==0) {
//检索的是最顶层目录
$i=0;
}
$r_str=array("treeid"=>$treeid,"ptreeid"=>$ptreeid,"treename"=>$treename,"treenick"=>$treenick,"allvalue"=>$var);
$this->outstr.=$this->_replace($this->tree_f,$r_str);
for ($k=0;$k<$i;$k++) {
$this->outstr.=$q_str[$k];
}
$this->outstr.=$end_str;
$this->outstr.=$this->_replace($this->tree_m,$r_str);
$this->outstr.=$this->_replace($this->tree_a,$r_str);
$i++;
$this->_echo_o_board($key,$arrtree,&$q_str,$i);
$kk++;//移到下一个
$i--;//恢复$i
/*
生成结构完成
*/
}
} else {
/*检索到最底层返回*/
return;
}
}
/*置换定义的字串*/
function _replace($str,$r_str) {
foreach ($r_str as $key=>$var) {
$str=str_replace("[$key]",$var,$str);
}
return($str);
}
/*echo_tree()显示树状目录*/
function echo_tree() {
echo $this->outstr;
}
/*
*list_select_tree()和list_tree()是两个默认的树状目录结构
*/
function list_select_tree() {
$table=s_table_n("board");
$arrboard=$this->_list_tree($table);
$this->outstr="<select name=p_b_id class=boardsele>";
$this->outstr.="<option value=0><--顶层板块--></option>";
$this->_echo_o_board(0,$arrboard,$q_str,0);
$this->outstr.="</select>";
return ($outstr);
}
function list_tree() {
$table=s_table_n("board");
$arrboard=$this->_list_tree($table);
$t="<img src=./images/tree_t.gif align=absmiddle width=20 height=20>";
$c="<img src=./images/tree_c.gif align=absmiddle width=20 height=20>";
$l="<img src=./images/tree_l.gif align=absmiddle width=20 height=20>";
$k="☆";//"<img src=./images/tree_k.gif align=absmiddle width=20 height=20>";
$m="<input type=\"radio\" name=\"board\" value=\"[allvalue]\" width=20 height=20>[treename]([treenick])";
$f="【★】";
$a="<br>\n";
$this->setTree ($t,$c,$l,$k,$m,$f,$a);
$this->_echo_o_board(0,$arrboard,$q_str,0);
}
}?>