導航:首頁 > 編程語言 > php菜單遞歸

php菜單遞歸

發布時間:2022-07-20 00:54:02

php怎麼用遞歸做商城類三級導航菜單

字元串和數組方式無限級分類。

如 字元串

header('Content-type: text/html; charset=utf-8');
include_once('connect.php');
function get_str($id=0){
global $str;
$sql="select id,title from class where pid=$id";
$result=mysql_query($sql);
if($result&&mysql_affected_rows()){

$str.="<ul>";
while($row=mysql_fetch_array($result)){

$str.="<li>".$row['id']."--".$row['title']."</li>";
get_str($row['id']);
}
$str.="</ul>";
}
return $str;
}
echo get_str(0);

㈡ PHP怎麼遞歸

下面我舉一個其他的例子,雖然不是族譜,但是原理都是一樣的。

在一些復雜的系統中,要求對信息欄目進行無限級的分類,以增強系統的靈活性。那麼PHP是如何實現無限級分類的呢?我們在本文中使用遞歸演算法並結合mysql數據表實現無限級分類。
遞歸,簡單的說就是一段程序代碼的重復調用,當把代碼寫到一個自定義函數中,將參數等變數保存,函數中重復調用函數,直到達到某個條件才跳出,返回相應的數據。
Mysql
首先我們准備一張數據表class,記錄商品分類信息。表中有三個欄位,id:分類編號,主鍵自增長;title:分類名稱;pid:所屬上級分類id。
class表結構:

CREATE TABLE IF NOT EXISTS `class` (
`id` mediumint(6) NOT NULL AUTO_INCREMENT,
`title` varchar(30) NOT NULL,
`pid` mediumint(6) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

插入數據後,如圖:

如果要輸出json格式的數據,則可使用:

echo json_encode($list);

㈢ php中的遞歸函數詳解

foreach 寫在 html里,然後寫<?php foreach() {?> tr>td <?php } ?>,把要展示的內容寫td里,記得用php包起來,echo

㈣ 如何理解php中的遞歸函數 (詳細講解)

遞歸其實就是「一個函數的自調用」
在這個「自調用」的過程中,必須要有一個變化的「參數」,當這個「參數」達到你的期望值的時候,終止該「自調用」過程

拿樓主的程序來說

demo($n)內部又有調用demo($n-1),構成了「自調用」
且,$n又有一個「期望值」,即是$n>1,不滿足此條件時,該自調用終止

即是說,最後一個執行的demo是demo($n9-1),其中$n9=2,然後返回為1(因為執行了return 1)
則$n9*demo($n9-1)即等於 2*demo(2-1),又等於2*1=2;
則$n8*demo($n8-1)即等於 3*demo(3-1),又等於3*2=6;
則$n7*demo($n7-1)即等於 4*demo(4-1),又等於4*6=24;
……
依次類推

這樣想:
demo(1)是等於1,這個沒有疑問吧?
然後demo(2)等於2*demo(1)=2*1=2
然後demo(3)等於3*demo(2)=3*2=6
……
一直到demo(10)

㈤ PHP遞歸問題

給前一行和後一行分別echo一句提示不就行了么。比如這樣:
function arrRecursion($data,$pid=0){
$arr=array();
foreach($data as $row){

if($row['pid']==$pid){
$row['child']=arrRecursion($data,$row['id']);
echo "start";
$arr[]=$row; //這一行能執行到么?
echo "end"; //或者你直接可以把$arr[]的值列印出來。
}
}
return $arr;
}

㈥ PHP 遞歸的解釋

這個 是這樣的。 首先傳值10 進入函數 第一次函數還沒執行最後一行的echo $num." "; 就嵌套進了第二次函數 .....直到進入最後一層函數 執行完了 就會跳出執行上一層的 函數沒執行完的echo $num." "; 一直這樣 最後就 到了第一次函數的 echo $num." ";

㈦ PHP遞歸樹形菜單

可以參考以下代碼,但需要把你自己的資料庫鏈接,表等改一下就可以了

<html>
<head>
<link href='style.css' rel=stylesheet>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script language="javaScript" src="TreeMenu.js"></script>
</head>
<body>
<?php
//基本變數設置
$GLOBALS["ID"] =1; //用來跟蹤下拉菜單的ID號
$layer=1; //用來跟蹤當前菜單的級數
//連接資料庫
$Con=mysql_connect("localhost","root","1234");
mysql_select_db("wiki");
//提取一級菜單
$sql="SELECT * FROM wiki where pid=0";
$result=mysql_query($sql,$Con);
//如果一級菜單存在則開始菜單的顯示
if(mysql_num_rows($result)>0) ShowTreeMenu($Con,$result,$layer,$ID);
//=============================================
//顯示樹型菜單函數 ShowTreeMenu($con,$result,$layer)
//$con:資料庫連接
//$result:需要顯示的菜單記錄集
//layer:需要顯示的菜單的級數
//=============================================
function ShowTreeMenu($Con,$result,$layer)
{
//取得需要顯示的菜單的項目數
$numrows=mysql_num_rows($result);

//開始顯示菜單,每個子菜單都用一個表格來表示
echo "<table cellpadding='0' cellspacing='0' border='0'>";
for($rows=0;$rows<$numrows;$rows++)
{
//將當前菜單項目的內容導入數組
$menu=mysql_fetch_array($result);
//提取菜單項目的子菜單記錄集
$sql="select * from wiki where pid=$menu[cid]";
$result_sub=mysql_query($sql,$Con);
echo "<tr>";
//如果該菜單項目有子菜單,則添加JavaScript onClick語句
if(mysql_num_rows($result_sub)>0)
{
echo "<td width='20'><img src='folder.gif' border='0'></td>";
echo "<td class='Menu' onClick='javascript:ShowMenu(Menu".$GLOBALS["ID"].");'>";
}
else
{
echo "<td width='20'><img src='file.gif' border='0'></td>";
echo "<td class='Menu'>";
}
//如果該菜單項目沒有子菜單,並指定了超級連接地址,則指定為超級連接,
//否則只顯示菜單名稱
//if($menu[url]!="")
//echo "<a href='$menu[cid]'>$menu[name]</a>";
//else
echo $menu['name'];
echo "
</td>
</tr>
";
//如果該菜單項目有子菜單,則顯示子菜單
if(mysql_num_rows($result_sub)>0)
{
//指定該子菜單的ID和style,以便和onClick語句相對應
echo "<tr id=Menu".$GLOBALS["ID"]++." style='display:none'>";
echo "<td width='20'> </td>";
echo "<td>";
//將級數加1
$layer++;
//遞歸調用ShowTreeMenu()函數,生成子菜單
ShowTreeMenu($Con,$result_sub,$layer);
//子菜單處理完成,返回到遞歸的上一層,將級數減1
$layer--;
echo "</td></tr>";
}
//繼續顯示下一個菜單項目
}
echo "</table>";
}
?>
</body>
</html>

㈧ PHP 如何遞歸演算法

一般來說,類似這種遍歷輸出所有文件,大多採用遞歸演算法,這樣程序顯得比較簡潔,其實際執行效率來說,並不見得比其他方法更好。

以下是示例:

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(菜單的製作,怎麼用遞歸)

現在國內很多個人站長都要求無限級菜單,但其實真正商業用,2級或3級菜單足夠了。無限級沒有意義,而且遞歸太耗CPU,其實是不足取的。
不過既然問了,還是說一下無限級菜單的原理吧:
1、資料庫結構:只有三個欄位是必須的:
id:菜單編號
title:菜單標題
pid:上級菜單
2、生成數組:
如果只是用於菜單顯示的話,數組可以根據上級分類來取:寫一個getArray(pid)的函數,根據上級菜單是什麼,來取得同級菜單。頂級菜單的pid是0,如果取得的數據為空,那麼就是沒有子菜單。
原理就這么簡單。你網上看源碼,還會有各種其它需求,比如一次樹狀列出所有菜單等等,所有源碼就會顯得很復雜。自己根據我說的原理寫,相對還是簡單的,只是做flash菜單的話,不需要遞歸。
最好讓你老闆確定菜單層數,這樣寫起來會容易得多。

㈩ php 遞歸問題

第一,沒有選擇資料庫,在連接資料庫後添加mysql_select_db("資料庫名");
第二、我感覺不代碼不全吧,因為我拷下來看了一下,少一},當然上面那個沒少,補充的少了。
第三、還有沒看出這個$ii是干什麼用的。
第四、沒感覺$selec=0與不等於0輸出有什麼不同。
第五、以後最好是把html代碼與程序分開寫。
因為不知道需求,只能根據你的程序簡單修改如下:
<?php
function TreeMenu($selec) {
$Conn=mysql_connect("localhost","kk","kk123");
mysql_select_db("資料庫名");
$ii=1;
$sql="select * from tvmenu where bid=".$selec;
$result=mysql_query($sql,$Conn);
$str = "";
while($row =mysql_fetch_array($result)) {
if($selec=0) {

$str = '<option value="'.$row['id'].'">'.$row['name'].'></option> ';

}else {

$str = '<option value="'.$row['id'].'">'.$row['name'].'></option> ';

}
echo $str;
$ii++;
TreeMenu($row['id']);
$ii--;
}
}
?>

<select name="bid" id="bid">
<?php
TreeMenu(0);
?>
</select>

閱讀全文

與php菜單遞歸相關的資料

熱點內容
怎麼做一個minecraft伺服器 瀏覽:769
c語言實現ls命令 瀏覽:663
小洋糕解壓視頻 瀏覽:450
域名內網訪問內網伺服器地址 瀏覽:138
我的世界伺服器如何摳掉金幣 瀏覽:223
域名與ip地址通過什麼伺服器查 瀏覽:95
企業網站需要什麼雲伺服器配置 瀏覽:909
遼事通伺服器出現錯誤是什麼原因 瀏覽:765
能否將一個表格的子表加密 瀏覽:63
手機ios微信收藏怎麼加密 瀏覽:593
安卓如何改黑色 瀏覽:330
oracle資料庫導出命令 瀏覽:696
用python做鍾表盤 瀏覽:873
腰椎壓縮性骨折吧 瀏覽:326
安卓怎麼把軟體改成火影忍者 瀏覽:704
手機如何切換軟體商店伺服器 瀏覽:325
江蘇省python二級題型 瀏覽:231
文件編譯器在哪 瀏覽:28
選擇目錄時此電腦的文件夾怎麼刪 瀏覽:25
狗狗幣加密支付服務 瀏覽:897