php遞迴實現無限極分類
阿新 • • 發佈:2021-12-17
一、陣列
$categories = array( array('id'=>1,'name'=>'陝西','parent_id'=>0), array('id'=>2,'name'=>'西安','parent_id'=>1), array('id'=>3,'name'=>'長安區','parent_id'=>2), array('id'=>4,'name'=>'河南','parent_id'=>0), array('id'=>5,'name'=>'鄭州','parent_id'=>4), array('id'=>6,'name'=>'河北','parent_id'=>0), array('id'=>7,'name'=>'石家莊','parent_id'=>6), array('id'=>8,'name'=>'新華區','parent_id'=>7));
二、遞迴實現無限極分類
//遞迴實現無限極分類 function getTree($array, $pid = 0, $level = 1) { // dd($array); $list =array(); foreach ($array as $key=>$v) { if ($v['parent_id'] == $pid) { $v['level'] = $level; $v['node']=getTree($array, $v['id'], $level + 1); $list[] = $v; //把這個節點從陣列中移除,減少後續遞迴消耗 unset($array[$key]); } } return $list; } /遞迴實現無限極分類陣列層級縮排轉換 注意:帶level深度的 function getTree2($array, $pid = 0, $level = 1){ static $list = []; foreach ($array as $key=>$v) { if ($v['parent_id'] == $pid) { $v['level'] = $level; $list[] = $v; //把這個節點從陣列中移除,減少後續遞迴消耗 unset($array[$key]); getTree2($array, $v['id'], $level + 1); } } return $list; }
三、效果
1、遞迴方式
Array ( [1] => Array ( [id] => 1 [name] => 陝西 [parent_id] => 0 [node] => Array ( [0] => Array ( [id] => 2 [name] => 西安 [parent_id] => 1 [node] => Array ( [0] => Array ( [id] => 3 [name] => 長安區 [parent_id] => 2 ) ) ) ) ) [4] => Array ( [id] => 4 [name] => 河南 [parent_id] => 0 [node] => Array ( [0] => Array ( [id] => 5 [name] => 鄭州 [parent_id] => 4 ) ) ) [6] => Array ( [id] => 6 [name] => 河北 [parent_id] => 0 [node] => Array ( [0] => Array ( [id] => 7 [name] => 石家莊 [parent_id] => 6 [node] => Array ( [0] => Array ( [id] => 8 [name] => 新華區 [parent_id] => 7 ) ) ) ) ) )
2、陣列層級縮排 帶level深度的
Array ( [0] => Array ( [id] => 1 [name] => 陝西 [parent_id] => 0 [level] => 1 ) [1] => Array ( [id] => 2 [name] => 西安 [parent_id] => 1 [level] => 2 ) [2] => Array ( [id] => 3 [name] => 長安區 [parent_id] => 2 [level] => 3 ) [3] => Array ( [id] => 4 [name] => 河南 [parent_id] => 0 [level] => 1 ) [4] => Array ( [id] => 5 [name] => 鄭州 [parent_id] => 4 [level] => 2 ) [5] => Array ( [id] => 6 [name] => 河北 [parent_id] => 0 [level] => 1 ) [6] => Array ( [id] => 7 [name] => 石家莊 [parent_id] => 6 [level] => 2 ) [7] => Array ( [id] => 8 [name] => 新華區 [parent_id] => 7 [level] => 3 ) )
程式碼改變世界!