PHP不用遞歸實現(xiàn)無限分級的例子分享
兩個不用遞歸的樹形數(shù)組操作函數(shù)
/**
* 創(chuàng)建父節(jié)點(diǎn)樹形數(shù)組
* 參數(shù)
* $ar 數(shù)組,鄰接列表方式組織的數(shù)據(jù)
* $id 數(shù)組中作為主鍵的下標(biāo)或關(guān)聯(lián)鍵名
* $pid 數(shù)組中作為父鍵的下標(biāo)或關(guān)聯(lián)鍵名
* 返回 多維數(shù)組
**/
function find_parent($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ){
if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
$t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
}
}
return $t;
}
/**
* 創(chuàng)建子節(jié)點(diǎn)樹形數(shù)組
* 參數(shù)
* $ar 數(shù)組,鄰接列表方式組織的數(shù)據(jù)
* $id 數(shù)組中作為主鍵的下標(biāo)或關(guān)聯(lián)鍵名
* $pid 數(shù)組中作為父鍵的下標(biāo)或關(guān)聯(lián)鍵名
* 返回 多維數(shù)組
**/
function find_child($ar, $id='id', $pid='pid') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$pid] ) {
$t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
}
}
return $t;
}
使用例子:
$data = array(
array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父親'),
array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
array('ID'=>5, 'PARENT'=>4, 'NAME'=>'兒子'),
);
$p = find_parent($data, 'ID', 'PARENT');
$c = find_child($data, 'ID', 'PARENT');
執(zhí)行效果:
Array
(
[1] => Array
(
[ID] => 1
[PARENT] => 0
[NAME] => 祖父
[child] => Array
(
[2] => Array
(
[ID] => 2
[PARENT] => 1
[NAME] => 父親
[child] => Array
(
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 兒子
)
)
)
)
)
[3] => Array
(
[ID] => 3
[PARENT] => 1
[NAME] => 叔伯
)
)
)
[2] => Array
(
[ID] => 2
[PARENT] => 1
[NAME] => 父親
[child] => Array
(
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 兒子
)
)
)
)
)
[3] => Array
(
[ID] => 3
[PARENT] => 1
[NAME] => 叔伯
)
[4] => Array
(
[ID] => 4
[PARENT] => 2
[NAME] => 自己
[child] => Array
(
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 兒子
)
)
)
[5] => Array
(
[ID] => 5
[PARENT] => 4
[NAME] => 兒子
)
)
相關(guān)文章
php使用FFmpeg接口獲取視頻的播放時長、碼率、縮略圖以及創(chuàng)建時間
本篇文章主要介紹了php使用FFmpeg接口獲取視頻的播放時長、碼率、縮略圖以及創(chuàng)建時間,具有一定的參考價值,有需要的可以了解一下。2016-11-11關(guān)于Laravel參數(shù)驗證的一些疑與惑
這篇文章主要給大家介紹了關(guān)于Laravel參數(shù)驗證的一些疑與惑,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Laravel具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11thinkphp循環(huán)結(jié)構(gòu)用法實例
這篇文章主要介紹了thinkphp循環(huán)結(jié)構(gòu)用法,以實例形式講解了for、volist及foreach的用法,是非常實用的技巧,需要的朋友可以參考下2014-11-11Laravel解決nesting level錯誤和隱藏index.php的問題
今天小編就為大家分享一篇Laravel解決nesting level錯誤和隱藏index.php的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10