php无限极分类实现的方法

php无限极分类实现的方法,第1张

初始化的数据

//初始化原始数据(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 '&emsp;&emsp;';

        }        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维)的数组结构,给予打印(需要用到引用),效果图如下:等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/9724504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存