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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...

發布時間:2025/3/8 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php如何对 mysql 中text类型拆分存入一个数组_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;

插入數據后,如圖:

PHP

根據不同的需求,我們提供兩種不同格式的自定義函數,一種是返回字符串,一種是返回數組,兩種函數都使用了遞歸方法。先看返回字符串格式的函數:

function?get_str($id?=?0)?{

global?$str;

$sql?=?"select?id,title?from?class?where?pid=?$id";

$result?=?mysql_query($sql);//查詢pid的子類的分類

if($result?&&?mysql_affected_rows()){//如果有子類

$str?.=?'

  • ';

while?($row?=?mysql_fetch_array($result))?{?//循環記錄集

$str?.=?"

"?.?$row['id']?.?"--"?.?$row['title']?.?"";?//構建字符串

get_str($row['id']);?//調用get_str(),將記錄集中的id參數傳入函數中,繼續查詢下級

}

$str?.=?'

';

}

return?$str;

}

以上函數get_str()通過遞歸,不斷查詢下級分類,并最終返回字符串,大家可以根據項目需求修改其中的str,最終生成一個無限分級列表:

include_once('connect.php');?//連接數據庫,connect.php文件自己寫一個啊

echo?get_str(0);?//輸出無限級分類

效果如:

接著我們來看返回數組格式的函數,一樣要使用遞歸:

function?get_array($id=0){

$sql?=?"select?id,title?from?class?where?pid=?$id";

$result?=?mysql_query($sql);//查詢子類

$arr?=?array();

if($result?&&?mysql_affected_rows()){//如果有子類

while($rows=mysql_fetch_assoc($result)){?//循環記錄集

$rows['list']?=?get_array($rows['id']);?//調用函數,傳入參數,繼續查詢下級

$arr[]?=?$rows;?//組合數組

}

return?$arr;

}

}

函數get_array()返回了數組,這是我們期待的,所以筆者推薦使用get_array()得到數組,這樣一來,我們可以對數組進行任意操作,比如我們可以將數組轉換成json格式的數據傳給前端頁面,前端頁面可以通過解析json數據靈活展示分類信息。比如樹形結構的分類列表,下拉分類列表等。

include_once('connect.php');?//連接數據庫

$list?=?get_array(0);?//調用函數

print_r($list);?//輸出數組

輸出效果如:

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

echo?json_encode($list);

(參考:PHP遞歸實現無限級分類)

比如飄易實際中用到的,把無限級分類放到?select?元素中:

//遞歸無限極?讀取所有分組

$qian_i=0;

function?get_group_str($id?=?0)?{

global?$conn,$qian_i;

$sql?=?"select?*?from?`group`?where?fid=?$id";

$result?=?mysql_query($sql);//查詢pid的子類的分類

if($result?&&?mysql_affected_rows()){//如果有子類

$qian_i++;

while?($row?=?mysql_fetch_array($result))?{?//循環記錄集

$qian?=?str_repeat(" ",?($qian_i-1)*6);

$str?.=?"$qian"?.?$row['title']?.?"";?//構建字符串

$str?.=?get_group_str($row['id']);?//遞歸調用函數本身,將記錄集中的id參數傳入函數中,繼續查詢下級

}

$qian_i--;

}

return?$str;

}

$opt="頂級分組";

$opt.=get_group_str(0);

注意,實際使用中請將上面紅色的全角空格代碼轉換成半角代碼。

效果圖:

再看下另外一種不錯的遞歸寫法:

/**

*?select選項?-?遞歸無限級?讀取所有分類

*?輸出數組,?可轉json字符串供前端轉換成js對象

*/

function?digui_js(?$id=0?)?{

global?$db;

$dgArr=[];

$cats?=?db_select_all(?"meeting_types",?"parent_id=$id?order?by?sort_id?desc,id?asc"?);

if?(?$cats!=null?)?{

foreach?(?$cats?as?$cat?)?{?//循環

$dgArr[]?=?["id"=>$cat["id"],?"title"=>$cat["title"],?"subset"=>digui_js(?$cat["id"]?)];

}

}

return?$dgArr;

}

$digui_js?=?json_encode(digui_js());

print_r($digui_js);

本文結束。

總結

以上是生活随笔為你收集整理的php如何对 mysql 中text类型拆分存入一个数组_PHP递归实现无限级分类,可选返回字符串和数组...的全部內容,希望文章能夠幫你解決所遇到的問題。

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