PHP不使用遞歸的無限級分類簡單實例
更新時間:2016年11月05日 15:48:02 投稿:jingxian
下面小編就為大家?guī)硪黄狿HP不使用遞歸的無限級分類簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
不用遞歸實現(xiàn)無限級分類,簡單測試了下性能比遞歸稍好一點點點,但寫得太復(fù)雜了,還是遞歸簡單方便點
代碼:
<?php $list = array( array('id'=>1, 'pid'=>0, 'deep'=>0, 'name'=>'test1'), array('id'=>2, 'pid'=>1, 'deep'=>1, 'name'=>'test2'), array('id'=>3, 'pid'=>0, 'deep'=>0, 'name'=>'test3'), array('id'=>4, 'pid'=>2, 'deep'=>2, 'name'=>'test4'), array('id'=>5, 'pid'=>2, 'deep'=>2, 'name'=>'test5'), array('id'=>6, 'pid'=>0, 'deep'=>0, 'name'=>'test6'), array('id'=>7, 'pid'=>2, 'deep'=>2, 'name'=>'test7'), array('id'=>8, 'pid'=>5, 'deep'=>3, 'name'=>'test8'), array('id'=>9, 'pid'=>3, 'deep'=>2, 'name'=>'test9'), ); function resolve($list) { $newList = $manages = $deeps = $inDeeps = array(); foreach ($list as $row) { $newList[$row['id']] = $row; } $list = null; foreach ($newList as $row) { if (! isset($manages[$row['pid']]) || ! isset($manages[$row['pid']]['children'][$row['id']])) { if ($row['pid'] > 0 && ! isset($manages[$row['pid']]['children'])) $manages[$row['pid']] = $newList[$row['pid']]; $manages[$row['pid']]['children'][$row['id']] = $row; } if (! isset($inDeeps[$row['deep']]) || ! in_array($row['id'], $inDeeps[$row['deep']])) { $inDeeps[$row['deep']][] = array($row['pid'], $row['id']); } } krsort($inDeeps); array_shift($inDeeps); foreach ($inDeeps as $deep => $ids) { foreach ($ids as $m) { // 存在子欄目的進(jìn)行轉(zhuǎn)移 if (isset($manages[$m[1]])) { $manages[$m[0]]['children'][$m[1]] = $manages[$m[1]]; $manages[$m[1]] = null; unset($manages[$m[1]]); } } } return $manages[0]['children']; }
遞歸實現(xiàn)
function resolve2(& $list, $pid = 0) { $manages = array(); foreach ($list as $row) { if ($row['pid'] == $pid) { $manages[$row['id']] = $row; $children = resolve2($list, $row['id']); $children && $manages[$row['id']]['children'] = $children; } } return $manages; }
以上這篇PHP不使用遞歸的無限級分類簡單實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Yii2.0框架模型添加/修改/刪除數(shù)據(jù)操作示例
這篇文章主要介紹了Yii2.0框架模型添加/修改/刪除數(shù)據(jù)操作,結(jié)合實例形式分析了Yii2.0使用模型操作數(shù)據(jù)的添加、修改、刪除相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2019-07-07Yii框架數(shù)據(jù)模型的驗證規(guī)則rules()被執(zhí)行的方法
這篇文章主要介紹了Yii框架數(shù)據(jù)模型的驗證規(guī)則rules()被執(zhí)行的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12在Laravel中實現(xiàn)使用AJAX動態(tài)刷新部分頁面
今天小編就為大家分享一篇在Laravel中實現(xiàn)使用AJAX動態(tài)刷新部分頁面,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10Win7 64位系統(tǒng)下PHP連接Oracle數(shù)據(jù)庫
項目中遇到一個問題,即怎么在Windows下連接Oracle進(jìn)行開發(fā)。幾乎所有的例子都是基于Mysql的,Oracle的連接本身在Windows平臺下就顯得比較復(fù)雜。這里便長話短說,只記錄有用部分,希望對大家有所幫助2014-08-08