php實現無限極分類
阿新 • • 發佈:2020-08-04
面試的時候被問到無限極分類的設計和實現,比較常見的做法是在建表的時候,增加一個PID欄位用來區別自己所屬的分類
$array = array( array('id' => 1, 'pid' => 0, 'name' => '河北省'), array('id' => 2, 'pid' => 0, 'name' => '北京市'), array('id' => 3, 'pid' => 1, 'name' => '邯鄲市'), array('id' => 4, 'pid'=> 2, 'name' => '朝陽區'), array('id' => 5, 'pid' => 2, 'name' => '通州區'), array('id' => 6, 'pid' => 4, 'name' => '望京'), array('id' => 7, 'pid' => 4, 'name' => '酒仙橋'), array('id' => 8, 'pid' => 3, 'name' => '永年區'), array('id' => 9, 'pid' => 1, 'name' => '武安市'), );
資料在資料庫中儲存大概是這個樣子,怎麼實現無限極遞迴呢,有兩種常用的做法,遞迴和引用演算法
function getTree($arr,$pid=0,$level=0){ static $list=[]; foreach($arr as $key => $value){ if($value['pid'] == $pid){ $value['level']=$level; $list[]=$value; unset($arr[$key]); getTree($arr,$value['id'],$level+1); } } return $list; } $handle_arr = getTree($array); print_r($handle_arr);