Thinkphp的list_to_tree 实现无限级分类列出所有节点
Thinkphp的list_to_tree 实现无限级分类列出所有节点
list_to_tree 使用起来十分方便,详细可查看手册。因为我在用的时候需要同时列出所有节点,所以写了一个递归函数,拿出来供大家参考。public function index(){ Load('extend'); //加载扩展方法 $Category=D('Category'); $list=$Category->order('sort desc')->select();//实现同级节点排序 $list=list_to_tree($list,'id','fid'); //详细参数见手册 $list=$this->findChild($list); dump($list); } protected function findChild($arr){ static $tree=array(); foreach ($arr as $key=>$val){ $tree[]=$val; if (isset($val['_child'])){ $this->findChild($val['_child']); } } return $tree; }
/** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array */ function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) { // 创建Tree $tree = array(); if(is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[] =& $list[$key]; }else{ if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; } } } } return $tree; } /** * 对查询结果集进行排序 * @access public * @param array $list 查询结果 * @param string $field 排序的字段名 * @param array $sortby 排序类型 * asc正向排序 desc逆向排序 nat自然排序 * @return array */ function list_sort_by($list,$field, $sortby='asc') { if(is_array($list)){ $refer = $resultSet = array(); foreach ($list as $i => $data) $refer[$i] = &$data[$field]; switch ($sortby) { case 'asc': // 正向排序 asort($refer); break; case 'desc':// 逆向排序 arsort($refer); break; case 'nat': // 自然排序 natcasesort($refer); break; } foreach ( $refer as $key=> $val) $resultSet[] = &$list[$key]; return $resultSet; } return false; } /** * 在数据列表中搜索 * @access public * @param array $list 数据列表 * @param mixed $condition 查询条件 * 支持 array('name'=>$value) 或者 name=$value * @return array */ function list_search($list,$condition) { if(is_string($condition)) parse_str($condition,$condition); // 返回的结果集合 $resultSet = array(); foreach ($list as $key=>$data){ $find = false; foreach ($condition as $field=>$value){ if(isset($data[$field])) { if(0 === strpos($value,'/')) { $find = preg_match($value,$data[$field]); }elseif($data[$field]==$value){ $find = true; } } } if($find) $resultSet[] = &$list[$key]; } return $resultSet; }

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在進行電腦程式設計時,有時需要求出源自特定節點的子樹的最小權重,條件是該子樹不能包含距離指定節點超過D個單位的節點。這個問題出現在各個領域和應用中,包括圖論、基於樹的演算法和網路最佳化。子樹是較大樹結構的子集,指定的節點作為子樹的根節點。子樹包含根節點的所有後代及其連接邊。節點的權重是指分配給該節點的特定值,可以表示其重要性、重要性或其他相關指標。在這個問題中,目標是找到子樹中所有節點中的最小權重,同時將子樹限制在距離根節點最多D個單位的節點。在下面的文章中,我們將深入研究從子樹中挖掘最小權重的複雜性

如何透過Vue和jsmind實現心智圖的節點複製和剪切功能?心智圖是一種常見的思考工具,能夠幫助我們整理想法、梳理思考邏輯。而節點複製和剪切功能是心智圖中常用的操作,能讓我們更方便重複利用現有的節點,提高思考整理的效率。在本文中,我們將使用Vue和jsmind這兩個工具來實現心智圖的節點複製和剪切功能。首先,我們需要安裝Vue和jsmind,並創建

js刪除節點的方法有:1、removeChild()方法,用於從父節點移除指定的子節點,它需要兩個參數,第一個參數是要刪除的子節點,第二個參數是父節點;2、parentNode.removeChild()方法,可以直接透過父節點呼叫來刪除子節點;3、remove()方法,可以直接刪除節點,而無需指定父節點;4、innerHTML屬性,用於刪除節點的內容。

C++有一個宏,它被定義為一段程式碼或期望的值,並且每當使用者需要時,它將被重複使用。佛洛伊德-沃爾夏爾演算法是在給定的加權圖中找到所有頂點對之間最短路徑的過程。該演算法遵循動態規劃的方法來找到最小權重圖。讓我們透過圖表來理解佛洛伊德-沃爾夏爾演算法的意義-以頂點1為來源,頂點4為目的地,求它們之間的最短路徑。我們已經看到有兩條路徑可以連接到目標頂點4。1->4–邊的權重為51->8->3->4–邊權重(1+2+1)為4。在給定的圖I中,我們看到兩個頂點之間連接的最小邊。所以這裡頂點

要檢查圖表的兩個中心之間的給定路徑是否符合最短路徑,可以透過使用可靠的最短路徑將沿著給定路徑的整個邊緣權重與相同中心組合之間的最短距離進行比較方式計算,例如Dijkstra計算或Floyd−Warshall計算。如果給定路徑上的所有邊權重與最有限的刪除相匹配,那麼它就代表最簡單的路徑。另外:如果整個邊權重比最短距離更突出,則表示圖表中兩個中心之間存在較短的距離。使用的方法Dijkstra演算法具有邊緣反轉成本的Floyd−Warshall演算法貪心演算法Dijkstra的計算可能是一種流行的圖表遍歷計算

OpenAI 是機器人和機器人對話的世界裡面的一個節點(雖然是一個重要的節點),卻不是中心。 ChatGPT 推出了 Plugin 機制,這是一項非常令人興奮的進展。大家不約而同評價「一個作業系統就此誕生」。這個說法,大錯特錯。 OpenAI 是機器人和機器人對話的世界裡面的一個節點(雖然是一個重要的節點),卻不是中心。我腦中一直有個圖景:一個機器人和機器人對話的世界。人跟一個機器人聊天,讓這個機器人透過它的機器人朋友幫助人類完成任務。 ChatGPT Plugin 嚴絲合縫的示範了這個世界的

給定n個節點,任務是列印鍊錶末尾的第n個節點。程式不得更改清單中節點的順序,而應僅列印鍊錶最後一個節點中的第n個節點。範例Input-:102030405060 N=3Output-:40在上面的範例中,從第一個節點開始,遍歷到count-n個節點,即10,2030,40,50,60,所以倒數第三個節點是40。而不是如此有效率地遍歷整個列表可以遵循的方法-獲取一個臨時指針,比如說,節點類型的temp將此臨時指針設置為指向的第一個節點頭指針將計數器設置為列表中的
