php之递归实现无限极分类

在web开发中,分类是极常见的功能。而无限极分类,顾名思义,就是按照层级无限进行分类。在前后端的交互过程中,要通过一定的方法来实现这种分类,而php的递归就是其中之一。

一、什么是递归

递归是指在程序运行过程中,调用自身的一种技巧。通过递归可以将复杂的问题简化为简单的问题,从而更好的解决问题。在php中使用递归,需要明确递归的两个要素:递归结束条件和递归表达式。

递归结束条件指的是递归何时停止的判断条件,这通常是指到达某个特定的深度、状态或者拥有某个特定的值。在递归的过程中,如果没有结束条件,程序将会陷入死循环。

递归表达式则是指在递归过程中,继续执行递归的操作。通常情况下,递归表达式是在递归函数内部,通过自我调用函数实现。

二、如何用递归实现无限极分类

我们可以使用递归来实现无限极分类。具体来说,我们可以定义一个递归函数,该函数接收一个参数,这个参数是一个数组,代表某一层级下的分类列表。函数内部进行递归操作,对每个分类依次进行遍历,如果这个分类有子分类,就通过递归函数对子分类进行遍历。在遍历结束后,返回整个分类数组。

具体实现如下:

1

2

3

4

5

6

7

8

9

10

11

12

function infiniteCategory($data, $pid = 0, $level = 0)

{

static $result = array();

foreach ($data as $key => $value) {

if ($value[parent_id] == $pid) {

$value[level] = $level;

$result[] = $value;

infiniteCategory($data, $value[id], $level + 1);

}

}

return $result;

}

登录后复制

解析如下:

(1)该函数接收三个参数,一个是分类列表数组$data,一个是父级id默认为0的$pid,一个是层级默认为0的$level。

(2)定义一个静态变量,用于存储最终的分类结果。

(3)通过foreach循环遍历分类列表,如果某个分类的parent_id等于$pid,说明这个分类属于当前层级,将其加入到最终结果数组$result。

(4)然后调用递归函数,将当前分类的id作为$pid传入,$level+1作为下一级分类的层级。

(5)遍历结束后,返回结果数组。

下面来测试一下:

1

2

3

4

5

6

7

8

9

10

11

12

13

$data = array(

array(id => 1, name => 电脑, parent_id => 0),

array(id => 2, name => 手机, parent_id => 0),

array(id => 3, name => 笔记本, parent_id => 1),

array(id => 4, name => 台式机, parent_id => 1),

array(id => 5, name => 智能手机, parent_id => 2),

array(id => 6, name => 非智能手机, parent_id => 2),

array(id => 7, name => 微型笔记本, parent_id => 3),

array(id => 8, name => 超级台式机, parent_id => 4),

array(id => 9, name => 小型台式机, parent_id => 4),

);

var_dump(infiniteCategory($data));

登录后复制

运行结果如下:

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

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

array(9) {

[0]=>

array(4) {

[“id”]=>

int(1)

[“name”]=>

string(6) “电脑”

[“parent_id”]=>

int(0)

[“level”]=>

int(0)

}

[1]=>

array(4) {

[“id”]=>

int(3)

[“name”]=>

string(9) “笔记本”

[“parent_id”]=>

int(1)

[“level”]=>

int(1)

}

[2]=>

array(4) {

[“id”]=>

int(7)

[“name”]=>

string(15) “微型笔记本”

[“parent_id”]=>

int(3)

[“level”]=>

int(2)

}

[3]=>

array(4) {

[“id”]=>

int(4)

[“name”]=>

string(9) “台式机”

[“parent_id”]=>

int(1)

[“level”]=>

int(1)

}

[4]=>

array(4) {

[“id”]=>

int(9)

[“name”]=>

string(18) “小型台式机”

[“parent_id”]=>

int(4)

[“level”]=>

int(2)

}

[5]=>

array(4) {

[“id”]=>

int(8)

[“name”]=>

string(18) “超级台式机”

[“parent_id”]=>

int(4)

[“level”]=>

int(2)

}

[6]=>

array(4) {

[“id”]=>

int(2)

[“name”]=>

string(6) “手机”

[“parent_id”]=>

int(0)

[“level”]=>

int(0)

}

[7]=>

array(4) {

[“id”]=>

int(5)

[“name”]=>

string(12) “智能手机”

[“parent_id”]=>

int(2)

[“level”]=>

int(1)

}

[8]=>

array(4) {

[“id”]=>

int(6)

[“name”]=>

string(15) “非智能手机”

[“parent_id”]=>

int(2)

[“level”]=>

int(1)

}

}

登录后复制

可以看到,已经成功将分类列表转换成了无限极分类,根据level字段的值,可以看出每个分类所处的层级。

三、小结

通过递归实现无限极分类的方法,能够让我们在web开发中迅速完成分类功能,而且具有较高的灵活性。在使用递归时,需要注意结束条件的设置,否则可能陷入死循环。

以上就是php之递归实现无限极分类的详细内容,更多请关注php中文网其它相关文章!

TG交流群(点击进入)----付费帮助搭建---修复---二开,以及发布求资源.
QQ交流群 922260178
© 版权声明
THE END
喜欢就支持一下吧
点赞1.9W+ 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容