日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php创建无限级树型菜单以及三级联动菜单

發布時間:2023/12/9 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php创建无限级树型菜单以及三级联动菜单 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.php.cn/php-weizijiaocheng-373500.html

?這篇文章主要介紹了php創建無限級樹型菜單 ,主要使用的是遞歸函數,感興趣的小伙伴們可以參考一下

?

寫遞歸函數,可考慮緩存,定義一些靜態變量來存上一次運行的結果,多程序運行效率很有幫助.。
大概步驟如下
step1:到數據庫取數據,放到一個數組,
step2:把數據轉化為一個樹型狀的數組,
step3:把這個樹型狀的數組轉為html代碼。
也可以將第二步和第三步合為一步。
詳細如下:
1、數據庫設計:

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

CREATE TABLE `bg_cate` (

`cate_Id` int(30) unsigned NOT NULL AUTO_INCREMENT,

`cate_ParentId` int(30) unsigned DEFAULT '0',

`cate_Name` varchar(100) NOT NULL,

`cate_Intro` varchar(500) DEFAULT NULL,

`cate_Order` int(30) unsigned DEFAULT '0',

`cate_Icon` varchar(100) DEFAULT NULL,

PRIMARY KEY (`cate_Id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=34 ;

--

-- 導出表中的數據 `bg_cate`

--

INSERT INTO `bg_cate` (`cate_Id`, `cate_ParentId`, `cate_Name`, `cate_Intro`, `cate_Order`, `cate_Icon`) VALUES

(4, 0, '往事如風', '記錄往事', 0, 'icons/6.gif'),

(5, 0, '水煮三國', '品位三國智慧', 0, 'icons/3.gif'),

(2, 0, '技術學習', '平時學習的一些筆記,歡迎批評指正。', 0, 'icons/18.gif'),

(3, 0, '生活點滴', '記錄生活點滴', 0, 'icons/2.gif'),

(6, 0, '梔子花開', '青春無限', 0, 'icons/8.gif'),

(7, 0, '假日休閑', '悠閑、自在', 0, 'icons/24.gif'),

(8, 2, 'html', 'html學習', 0, 'icons/1.gif'),

(9, 2, 'css', 'css學習', 0, 'icons/1.gif'),

(10, 2, 'php', 'php學習', 0, 'icons/18.gif'),

(11, 10, 'php基礎知識', 'php基礎知識', 0, 'icons/1.gif'),

(12, 10, 'oop', 'oop', 0, 'icons/1.gif'),

(13, 10, 'php安全', '講述php安全', 0, 'icons/1.gif'),

(14, 10, 'seagull framework', 'seagull framework', 0, 'icons/1.gif'),

(15, 2, 'javascript', 'javascript學習', 0, 'icons/1.gif'),

(16, 2, '設計模式', NULL, 0, 'icons/1.gif'),

(17, 2, '軟件工程', '軟件工程學習', 0, 'icons/1.gif'),

(18, 3, '廈門生活', '廈門生活', 0, 'icons/8.gif'),

(19, 3, '大學生活', '大學生活', 0, 'icons/8.gif'),

(20, 3, '童年生活', '童年生活', 0, 'icons/15.gif'),

(21, 19, '學習', '學習', 0, 'icons/1.gif'),

(22, 19, '運動', '運動', 0, 'icons/16.gif'),

(23, 19, '旅游', '旅游', 0, 'icons/24.gif'),

(24, 22, '排球', '排球', 0, 'icons/9.gif'),

(25, 22, '籃球', '籃球', 0, 'icons/9.gif'),

(26, 22, '羽毛球', '羽毛球', 0, 'icons/9.gif'),

(27, 22, '乒乓球', '乒乓球', 0, 'icons/9.gif');

2、到數據庫取數據,放到數組:

1

2

3

4

5

6

7

require_once './classes/MyDB.php';

$con = MyDB::singleton();

$sql = <<<SQL

?select * from bg_cate cate

SQL;

$data = $con->getAll($sql);

//print_r($data);

數據庫操作我用的是pear類庫,最后的$data的數據格式如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Array

(

?[0] => Array

?(

?[cate_Id] => 4

?[cate_ParentId] => 0

?[cate_Name] => 往事如風

?[cate_Intro] => 記錄往事

?[cate_Order] => 0

?[cate_Icon] => icons/6.gif

?)

?[1] => Array

?(

?[cate_Id] => 5

?[cate_ParentId] => 0

?[cate_Name] => 水煮三國

?[cate_Intro] => 品位三國智慧

?[cate_Order] => 0

?[cate_Icon] => icons/3.gif

?)

3、把上一步的數據轉為樹型狀的數組代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function getTree($data, $pId)

{

$tree = '';

foreach($data as $k => $v)

{

?if($v['cate_ParentId'] == $pId)

?{ //父親找到兒子

?$v['cate_ParentId'] = getTree($data, $v['cate_Id']);

?$tree[] = $v;

?//unset($data[$k]);

?}

}

return $tree;

}

$tree = getTree($data, 0);

最后輸出$tree的數據格式為:

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

Array

(

?[0] => Array

?(

?[cate_Id] => 4

?[cate_ParentId] =>

?[cate_Name] => 往事如風

?[cate_Intro] => 記錄往事

?[cate_Order] => 0

?[cate_Icon] => icons/6.gif

?)

?[1] => Array

?(

?[cate_Id] => 5

?[cate_ParentId] =>

?[cate_Name] => 水煮三國

?[cate_Intro] => 品位三國智慧

?[cate_Order] => 0

?[cate_Icon] => icons/3.gif

?)

?[2] => Array

?(

?[cate_Id] => 2

?[cate_ParentId] => Array

?(

??[0] => Array

??(

??[cate_Id] => 8

??[cate_ParentId] =>

??[cate_Name] => html

??[cate_Intro] => html學習

??[cate_Order] => 0

??[cate_Icon] => icons/1.gif

??)

4、把樹型狀數組轉為html代碼如下:

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

function procHtml($tree)

{

$html = '';

foreach($tree as $t)

{

?if($t['cate_ParentId'] == '')

?{

?$html .= "<li>{$t['cate_Name']}</li>";

?}

?else

?{

?$html .= "<li>".$t['cate_Name'];

?$html .= procHtml($t['cate_ParentId']);

?$html = $html."</li>";

?}

}

return $html ? '<ul>'.$html.'</ul>' : $html ;

}

echo procHtml($tree);

輸出的html的代碼格式為:

<ul>

<li>往事如風</li>

<li>水煮三國</li>

<li>技術學習

?<ul>

?<li>html</li>

?<li>css</li>

?<li>php

?<ul>

?<li>php基礎知識</li>

?<li>oop</li>

?<li>php安全</li>

5、也可以把第3和第4步的代碼合在一起,代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function getTree($data, $pId)

{

$html = '';

foreach($data as $k => $v)

{

?if($v['cate_ParentId'] == $pId)

?{ //父親找到兒子

?$html .= "<li>".$v['cate_Name'];

?$html .= getTree($data, $v['cate_Id']);

?$html = $html."</li>";

?}

}

return $html ? '<ul>'.$html.'</ul>' : $html ;

}

echo getTree($data, 0);

6、最后再加點css樣式,效果如下:

整個過程思路很清晰,非常適合第一次創建無限級樹型的朋友學習,希望大家都有所收獲。

以下是利用php做的三級聯動菜單

數據庫結構

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

-- 表的結構 `bigclass`

--

CREATE TABLE `bigclass` (

`bigclassid` int(11) NOT NULL auto_increment,

`bigclassname` varchar(200) collate utf8_unicode_ci NOT NULL,

`sort` int(11) NOT NULL,

`suoshu` int(1) NOT NULL,

PRIMARY KEY (`bigclassid`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=19 ;

-- 表的結構 `smallclass`

--

CREATE TABLE `smallclass` (

`smallclassid` int(11) NOT NULL auto_increment,

`smallclassname` varchar(200) collate utf8_unicode_ci NOT NULL,

`bigclassid` int(11) NOT NULL,

`sort` int(11) NOT NULL,

PRIMARY KEY (`smallclassid`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;

-- 表的結構 `minclass`

--

CREATE TABLE `minclass` (

`minclassid` int(10) NOT NULL auto_increment,

`minclassname` varchar(200) NOT NULL,

`bigclassid` int(10) NOT NULL,

`smallclassid` int(10) NOT NULL,

`sort` int(10) NOT NULL,

PRIMARY KEY (`minclassid`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

代碼如下

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

<script language = "JavaScript">

var onecount;

onecount=0;

subcat = new Array();

<?

//類別選擇

mysql_select_db($database_lr, $lr);

$sql = "select * from smallclass order by sort";

$result = mysql_query( $sql );

$count = 0;

while($res = mysql_fetch_row($result)){

?>

subcat[<?=$count?>] = new Array("<?=$res[1]?>","<?=$res[4]?>","<?=$res[0]?>");

<?

$count++;

}

?>

onecount=<?php echo $count?>

//聯動函數

function changelocation(bigclassid)

{

document.myform.smallclassid.length = 0;

var bigclassid=bigclassid;

var i;

document.myform.smallclassid.options[0] = new Option('請選擇二級分類','');

for (i=0;i < onecount; i++)

{

if (subcat[i][1] == bigclassid)

{

document.myform.smallclassid.options[document.myform.smallclassid.length] = new Option(subcat[i][0], subcat[i][2]);

}

}

}

</script>

<?php

mysql_select_db($database_lr, $lr);

$sql2 = "select * from minclass order by sort";

$result2 = mysql_query( $sql2 );

$count2 = 0;

?>

<script language = "JavaScript">

//如果這個數組中含有雙引號則不能使用。即二級和三級類不能含有雙引號

var onecount2;

onecount2=0;

subcat2 = new Array();

<?php

$count2 = 0;

while($res2 = mysql_fetch_row($result2)){

?>

subcat2[<?php echo $count2?>] = new Array("<?php echo $res2[1]?>","<?php echo $res2[3]?>","<?php echo $res2[0]?>");

<?php

$count2++;

}

?>

onecount2=<?php echo $count2?>;

function changelocation2(smallclassid)

{

document.myform.minclassid.length = 0;

var smallclassid=smallclassid;

var j;

document.myform.minclassid.options[0] = new Option('請選擇三級分類','');

for (j=0;j < onecount2; j++)

{

if (subcat2[j][1] == smallclassid)

{

document.myform.minclassid.options[document.myform.minclassid.length] = new Option(subcat2[j][0], subcat2[j][2]);

}

}

}

</script>

<select name="bigclassid" onChange="changelocation(document.myform.bigclassid.options[document.myform.bigclassid.selectedIndex].value)" size="1">

<option selected value="">請指定一級分類</option>

<?

$sql = "select * from bigclass order by sort";

$result = mysql_query( $sql );

while($res = mysql_fetch_row($result)){

?>

<option value="<? echo $res[0]; ?>"><? echo $res[1]?></option>

<? } ?>

</select>

<select name="smallclassid" onChange="changelocation2(document.myform.smallclassid.options[document.myform.smallclassid.selectedIndex].value)" size="1">

<option selected value="">請指定二級分類</option>

</select>

<select name="minclassid" size="1">

<option selected value="">==所有三級分類==</option>

</select>

以上就是php創建無限級樹型菜單以及三級聯動菜單的詳細內容,更多請關注php中文網其它相關文章!

總結

以上是生活随笔為你收集整理的php创建无限级树型菜单以及三级联动菜单的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。