PHP无限级分类之下拉列表式分类(上)
实现原理图

下拉列表式无限级分类
<?php
include ("conn.php");
function getList($pid=0,&$result=array(),$space=0){
$space=$space+2;
$sql="SELECT*FROM deepcate WHERE pid = $pid";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)){
$row['catename']=str_repeat(' ',$space).'|--|'.$row['catename'];
$result[]=$row;
getList($row['id'],$result,$space);
}
return $result;
}
$rs=getList();
function displayCate($pid=0,$selected=1){
$rs=getList($pid);
$str='';
$str.="<select name='cate'>";
foreach ($rs as $key=>$val){
$selectedstr='';
if ($val['id'] == $selected){
$selectedstr="selected";
}
$str.="<option{$selectedstr}>{$val['catename']}</option>";
}
return $str.='</select>';
}
echo displayCate(0,2);
?>实例就是一个无限级分类,下面我们就对代码进行分段的讲解。
代码解释:
<?php
include ("conn.php");
function getList($pid=0,&$result=array(),$space=0){
$space=$space+2;
$sql="SELECT*FROM deepcate WHERE pid = $pid";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)){
$row['catename']=str_repeat(' ',$space).'|--|'.$row['catename'];
$result[]=$row;
getList($row['id'],$result,$space);
}
return $result;
}
$rs=getList();
?>function getList($pid=0){
}
?>首先定义一个函数,pid作为父类ID,定义为0。
$sql="SELECT*FROM deepcate WHERE pid = $pid";
使用sql语句,查询pid选面的子类。
$res = mysql_query($sql);
//执行sql语句
$result=array();
while ($row = mysql_fetch_assoc($res)){
$result[]=$row;
}
return $result;把结果放入数组中,然后返回到result中。
递归是函数自身调用自身的技巧,我们在查询子类 的 时候需要调用到getList($row['id']);
子类的ID要作为下一级的ID所以要在后面带入$row['id'])
这时候的代码为
<?php
function getList($pid=0){
$sql="SELECT*FROM deepcate WHERE pid = $pid";
$res = mysql_query($sql);
$result=array();
while ($row = mysql_fetch_assoc($res)){ $result[]=$row; } return $result;
}
?>递归在操作是需要返回数组,我们使用引用的方法,对代码进行更改
<?php
include ("conn.php");
function getList($pid=0,&$result=array()){
$sql="SELECT*FROM deepcate WHERE pid = $pid";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)){
$result[]=$row;
getList($row['id'],$result);
}
return $result;
}
?>接下来对分类的样式进行美化
<?php
include ("conn.php");
function getList($pid=0,&$result=array(),$space=0){
$space=$space+2;
$sql="SELECT*FROM deepcate WHERE pid = $pid";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)){
$row['catename']=str_repeat(' ',$space).'|--|'.$row['catename'];
$result[]=$row;
getList($row['id'],$result,$space);
}
return $result;
}
$rs=getList();
print_r($rs);
?>打印出来进行观察。
本章重点
递归实现无限级分类是用利用递归方式,找出父节点,生成一个家谱树。
子类与父类。

@
我就是想知道在数据展示的时候那个selected代表什么东西啊,好奇怪啊,一直没有理清楚
7年前 添加回复 0