初始化的数据
//初始化原始数据(id=>编号,name=>显示名称,pid=>父级目录id,sort=>排序顺序)$data[1] = array('id'=>'1','name'=>'一级目录A','pid'=>'0','sort'=>'1');$data[2] = array('id'=>'2','name'=>'一级目录B','pid'=>'0','sort'=>'2');
$data[3] = array('id'=>'3','name'=>'一级目录C','pid'=>'0','sort'=>'3');
$data[4] = array('id'=>'4','name'=>'一级目录D','pid'=>'0','sort'=>'4');
$data[5] = array('id'=>'5','name'=>'二级目录A-1','pid'=>'1','sort'=>'1');
$data[6] = array('id'=>'6','name'=>'二级目录A-2','pid'=>'1','sort'=>'2');
$data[7] = array('id'=>'7','name'=>'二级目录A-3','pid'=>'1','sort'=>'3');
$data[8] = array('id'=>'8','name'=>'二级目录B-1','pid'=>'2','sort'=>'1');
$data[9] = array('id'=>'9','name'=>'二级目录B-2','pid'=>'2','sort'=>'2');
$data[10] = array('id'=>'10','name'=>'二级目录B-3','pid'=>'2','sort'=>'3');
$data[11] = array('id'=>'11','name'=>'二级目录C-1','pid'=>'3','sort'=>'2');
$data[12] = array('id'=>'12','name'=>'二级目录D-1','pid'=>'4','sort'=>'1');
$data[13] = array('id'=>'13','name'=>'二级目录D-2','pid'=>'4','sort'=>'2');
$data[14] = array('id'=>'14','name'=>'三级目录A-2-1','pid'=>'6','sort'=>'1');
$data[15] = array('id'=>'15','name'=>'三级目录A-2-2','pid'=>'6','sort'=>'2');
$data[16] = array('id'=>'16','name'=>'三级目录C-1-1','pid'=>'11','sort'=>'1');
$data[17] = array('id'=>'17','name'=>'三级目录B-2-1','pid'=>'9','sort'=>'2');
显示树结构
function printTree($data,$level=0){ foreach($data as $key=>$value){ for($i=0;$i<=$level;$i++){ echo '  ';} echo $value['name']; echo '<br>'; if(!empty($value['children'])){
printTree($value['children'],$level+1);
}
}
}
使用递归的方式获取无限极分类数组
function getNodeTree(&$list,&$tree,$pid=0){ foreach($list as $key=>$value){ if($pid == $value['pid']){$tree[$value['id']]=$value; unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}
使用引用-无限极分类
function createNodeTree(&$list,&$tree){ foreach($list as $key=>$node){ if(isset($list[$node['pid']])){$list[$node['pid']]['children'][] = &$list[$key];
}else{
$tree[] = &$list[$node['id']];
}
}
}
调用
//递归-无限极分类调用getNodeTree($data,$tree);printTree($tree);//使用引用-无限极分类调用createNodeTree($data,$tree);
printTree($tree);
一般来说,类似这种遍历输出所有文件,大多采用递归算法,这样程序显得比较简洁,其实际执行效率来说,并不见得比其他方法更好。
以下是示例:
function file_list($path)
{
if ($handle = opendir($path))//打开路径成功
{
while (false !== ($file = readdir($handle)))//循环读取目录中的文件名并赋值给$file
{
if ($file != "" && $file != "")//排除当前路径和前一路径
{
if (is_dir($path"/"$file))
{
// echo $path": "$file"<br>";//去掉此行显示的是所有的非目录文件
file_list($path"/"$file);
}
else
{
echo $path": "$file"<br>";
}
}
}
}
}
<php
$a = [];
$i = 0;
$e = 9;
while($s++ < $e){
$a[$s] = $a;
unset($a[$s-1]);
}
print_r($a);
这样可以吗
以下代码也许能达到你想要的效果:
<php
function TreeMenu($selec, $pre = '') {
$Conn = mysql_connect("localhost", "kuke", "kuke123");
mysql_select_db("tvmenu");
$sql = "select from tvmenu where bid=" $selec;
$result = mysql_query($sql, $Conn);
$str = "";
while($row = mysql_fetch_array($result)) {
echo '<option value="' $row['id'] '">' $pre $row['name'] '></option>';
if ($row['id'] != 0) {
TreeMenu($row['id'], $pre ' ');
}
}
}
>
<select name="bid" id="bid">
<php
TreeMenu(0);
>
</select>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//递归获得角色ID字符串
function explodeRole($roleObj, &$resultStr){
if(0 < count($roleObj->childRoleObjArr)){
foreach($roleObj->childRoleObjArr as $childRoleObj){
if('' == $resultStr){
$resultStr = "{$childRoleObj->id}";
}else{
$resultStr = ", {$childRoleObj->id}";
}
explodeRole($childRoleObj, $resultStr);
}
}
}
//递归获取级联角色信息数组
function makeRoleRelation(&$roleObjArr){
foreach($roleObjArr as $item){
$item->childRoleObjArr = getRoleObjArrByParentId($item->id);
if(0 < count($item->childRoleObjArr)){
makeRoleRelation($item->childRoleObjArr);
}
}
}
//通过父角色的id获取子角色信息
function getRoleObjArrByParentId($parentid){
$operCOGPSTRTSysRole = new COGPSTRTSysRole();
$operCOGPSTRTSysRole->setColumn($operCOGPSTRTSysRole->getAllColumn());
$operCOGPSTRTSysRole->setWhere("parentroleid={$parentid}");
$roleObjArr = $operCOGPSTRTSysRole->convResult2ObjArr($operCOGPSTRTSysRole->selectTable());
return isset($roleObjArr)$roleObjArr:array();
}
php的递归函数用法
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。这对于程序员来说,通常有很高的实用价值,常用来将复杂的问题分解为简单的并相同的情况,反复做这种处理直到问题解决。
用递归函数与不用递归函数的区别
示例一:使用静态变量
1
2
3
4
5
6
7
8
function test(){
static $dig=0;
if($dig++<10){
echo $dig;
test();
}
}
test();//12345678910
示例二:使用递归函数和循环实现字符串逆转排列
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function unreverse($str){
for($i=1;$i<=strlen($str);$i++){
echo substr($str,-$i,1);
}
}
unreverse("abcdefg");//gfedcbc
function reverse($str){
if(strlen($str)>0){
reverse(substr($str,1));
echo substr($str,0,1);
return;
}
}
reverse("abcdefg");//gfedcbc
递归函数很多时候我们可以循环替代,建议当我们不能用循环替代时再用,因为用循环我们更容易理解,更不容易出错。
php递归函数
php支付递归函数,递归函数就是调用自己本身,这些函数特别适用于浏览动态数据结构,例如树和列表。
几乎没有web应用程序要求使用复杂的数据结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<php
function reversr_r($str)
{
if (strlen($str)>0)
reverse_r(substr($str,1));
echo substr($str,0,1);
return;
}
>
<php
function reverse_i($str)
{
for($i=1;$i<=strlen($str);$i++)
{
echo substr($str,-$i,1);
}
}
这个程序清单中实现两个函数,这两个函数都可以相反的顺序打印字符串的内容
函数reversr_r是通过递归实现的,而函数reverse_i()是通过循环实现的
以上就是关于php无限极分类实现的方法全部的内容,包括:php无限极分类实现的方法、PHP 如何递归算法、PHP中自定义一个函数,递归出一个有10层(10维)的数组结构,给予打印(需要用到引用),效果图如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)