list.php
<?php
$link = mysqli_connect('localhost','root','','other');
mysqli_set_charset($link,'utf8');//设置中文编码
function getList($pid = 0,&$result = array(),$spac = 0){
global $link;
$spac = $spac+2;//标题前空格重复的次数
//根据父id查找数据
$sql = "SELECT * FROM sort where pid=$pid";
//发送sql语句
$res = mysqli_query($link,$sql);
//判断$row里的值是否为空然后再循环
while ($row = mysqli_fetch_assoc($res)){
//str_repeat 重复括号里的字符串,后面跟的是次数
$row['title'] = str_repeat(' ',$spac).'|--'.$row['titl
//把数组赋给 $resulte'];
$result[] = $row;
//递归调用,自己调用自己 这个括号里的参数和上面getList($pid=0...)是一样的$row['id']==$pid=0;
getList($row['id'],$result,$spac);
}
return $result;//把结果返回出去
}
$rs = getList();//使用方法
echo '<pre>';
echo '<select>';
foreach ($rs as $k => $v){
echo "<option value =>{$v['title']}</option>";
}
echo "</select>";
效果图:
getList这个方法并且设置传入三个可选参数,分别是一个默认的 pid、一个引用的数组参数result和一个空格符计数 spac 。然后设置了连接数据库的变量link为全局变量,主要是为了能在这个方法中正常使用。
实现上图效果的主要思路就是,遍历示例中的数组,当它的父级pid和顶级0相同时候,提取数组名字,重新编辑,加上前缀,放回去,然后通过递归算法再自己调用自己,完成一次递归,到下一次,如果有下一级别的pid,则继续调用