php實現無限級分類的兩種方式
阿新 • • 發佈:2018-06-21
@param HP 獲取 velt 分類 get gets key turn 一、梯式:
- 代碼:
/* @desc:獲取梯式分類 @param data 需要轉換的數據 @param pkey 上級的鍵名 @param key 主鍵名 @param pid 頂級id @param level 起始層級 默認0 @return ret 轉換後的數組 */ function getleveltree($data,$pkey,$key,$pid = 0,$level = 0){ $ret = array(); foreach ($data as $v){ if($v[$pkey] == $pid){ $v[‘level‘] = $level; $ret[] = $v; $ret = array_merge($ret,getleveltree($data,$pkey,$key,$v[$key],$level+1)); } } return $ret; }
- 測試:
$data = array( array( ‘id‘ => 1, ‘pid‘ => 0 ), array( ‘id‘ => 2, ‘pid‘ => 1 ), array( ‘id‘ => 3, ‘pid‘ => 2 ) ); $ret = getleveltree($data,‘pid‘,‘id‘); var_dump($ret);
- 輸出:
array(3) { [0]=> array(3) { ["id"]=> int(1) ["pid"]=> int(0) ["level"]=> int(0) } [1]=> array(3) { ["id"]=> int(2) ["pid"]=> int(1) ["level"]=> int(1) } [2]=> array(3) { ["id"]=> int(3) ["pid"]=> int(2) ["level"]=> int(2) } }
二、裂變式:
- 代碼:
/* @desc:獲取裂變式分類 @param data 需要轉換的數據 @param pkey 上級的鍵名 @param key 主鍵名 @param pid 頂級id 默認0 @return ret 轉換後的數組 */ function getsubtree($data,$pkey,$key,$pid = 0) { $ret = array(); foreach ($data as $v){ if($v[$pkey] == $pid){ $v[‘child‘] = getsubtree($data,$pkey,$key,$v[$key]); $ret[] = $v; } } return $ret; }
- 測試:
$data = array( array( ‘id‘ => 1, ‘pid‘ => 0 ), array( ‘id‘ => 2, ‘pid‘ => 1 ), array( ‘id‘ => 3, ‘pid‘ => 2 ) ); $ret = getsubtree($data,‘pid‘,‘id‘); var_dump($ret);
- 輸出:
array(1) { [0]=> array(3) { ["id"]=> int(1) ["pid"]=> int(0) ["child"]=> array(1) { [0]=> array(3) { ["id"]=> int(2) ["pid"]=> int(1) ["child"]=> array(1) { [0]=> array(3) { ["id"]=> int(3) ["pid"]=> int(2) ["child"]=> array(0) { } } } } } } }
php實現無限級分類的兩種方式