PHP不使用遞歸的無(wú)限級(jí)分類簡(jiǎn)單實(shí)例
不用遞歸實(shí)現(xiàn)無(wú)限級(jí)分類,簡(jiǎn)單測(cè)試了下性能比遞歸稍好一點(diǎn)點(diǎn)點(diǎn),但寫(xiě)得太復(fù)雜了,還是遞歸簡(jiǎn)單方便點(diǎn)

代碼:
<?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'];
}
遞歸實(shí)現(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不使用遞歸的無(wú)限級(jí)分類簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單實(shí)用的.net DataTable導(dǎo)出Execl
2013-10-10
PHP中使用register_shutdown_function函數(shù)截獲fatal error示例
這篇文章主要介紹了PHP中使用register_shutdown_function函數(shù)截獲fatal error示例,需要的朋友可以參考下2015-04-04
PHP調(diào)用OpenOffice實(shí)現(xiàn)word轉(zhuǎn)PDF的方法
下面小編就為大家?guī)?lái)一篇PHP調(diào)用OpenOffice實(shí)現(xiàn)word轉(zhuǎn)PDF的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11
thinkPHP5框架數(shù)據(jù)庫(kù)連貫操作之cache()用法分析
這篇文章主要介紹了thinkPHP5框架數(shù)據(jù)庫(kù)連貫操作之cache()用法,結(jié)合實(shí)例形式分析了thinkPHP5中緩存cache的應(yīng)用場(chǎng)景及連貫操作中cache的設(shè)置、更新、刪除等操作技巧,需要的朋友可以參考下2018-01-01
創(chuàng)建無(wú)限極分類樹(shù)型結(jié)構(gòu)的簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇?jiǎng)?chuàng)建無(wú)限極分類樹(shù)型結(jié)構(gòu)的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
使用PHP+MySql+Ajax+jQuery實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)功能示例
下面小編就為大家?guī)?lái)一篇使用PHP+MySql+Ajax+jQuery實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)功能示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
php在程序中將網(wǎng)頁(yè)生成word文檔并提供下載的代碼
在php程序文件中生成內(nèi)容到word文檔中并提供下載功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2012-10-10
PHP中isset()和unset()函數(shù)的用法小結(jié)
本篇文章主要是對(duì)PHP中isset()和unset()函數(shù)的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03
Laravel 5框架學(xué)習(xí)之表單驗(yàn)證
Laravel 通過(guò) Validation 類讓您可以簡(jiǎn)單、方便的驗(yàn)證數(shù)據(jù)正確性及查看相應(yīng)的驗(yàn)證錯(cuò)誤信息。如果是更復(fù)雜的驗(yàn)證場(chǎng)景,你可能需要?jiǎng)?chuàng)建一個(gè)"表單請(qǐng)求"。表單請(qǐng)求是一個(gè)自定義的請(qǐng)求類包含了一些驗(yàn)證的邏輯。你可以通過(guò) Artisan 的命令行 make:request 來(lái)創(chuàng)建一個(gè)表單請(qǐng)求類2015-04-04

