전자상거래 사이트 백 스테이지 노트: 무한 분류

무한 분 류 를 이해 하려 면 먼저 그 데이터 구 조 를 확정 한 다음 에 쉬 운 것 부터 어 려 운 것 까지 각각 자 결점 을 이해 하고 조상 결점 을 찾 아 자손 결점 을 찾 아야 한다.
데이터 구 조 는 다음 과 같다.
$arr=array(
array('id'=>1,'name'=>'  ','parent_id'=>0),
array('id'=>2,'name'=>'  ','parent_id'=>1),
array('id'=>3,'name'=>'  ','parent_id'=>1),
array('id'=>4,'name'=>'  ','parent_id'=>0),
array('id'=>5,'name'=>'  ','parent_id'=>2),
array('id'=>6,'name'=>'  ','parent_id'=>4),
array('id'=>7,'name'=>'  ','parent_id'=>4),
array('id'=>8,'name'=>'  ','parent_id'=>5),
array('id'=>9,'name'=>'  ','parent_id'=>3));

최종 효 과 는 다음 과 같다.
  
   
    
     
   
    
  
   
   

지금 우 리 는 쉬 운 것 부터 어 려 운 것 까지 먼저 자 결점 을 찾 는 것 을 실현 한다.어떤 결점 과 그 자결 점 의 관계 가 이 결점 에 있 는 id 는 자결 점 의 parent 와 같다id。
주어진 array ('id' = > 1, 'name' = > '호 북', 'parent id' = > 0) 의 하위 노드 는:
array('id'=>2,'name'=>'  ','parent_id'=>1)array('id'=>3,'name'=>'  ','parent_id'=>1)

이 논리 에 따 르 면 코드 는 다음 과 같 습 니 다.
function sontree($arr,$cat_id){
	$son=array();
	foreach ($arr as $k => $v) {
		if($v['parent_id']==$cat_id){
			$son[]=$v;
		}
	}
	return $son;
}

이어서 조상 을 찾 는 결점, A 결점 을 찾 는 parentid 는 B 결점 의 id 와 같 으 면 B 결점 은 A 결점 의 조상 이 고 순서대로 유추 하여 어떤 조상 이 결점 을 맺 을 때 까지 parentid = 0 시 종료.예: A - > B - > C - > D (D 의 parent id = 0) 는 A 결점 의 조상 은 B - > C - > D 이다. 이 논리 에 따 르 면 코드 는 다음 과 같다.
function fathertree34($arr,$id){
	$father=array();
	while($id>0){
		foreach ($arr as $k => $v) {
			if($v['cat_id']==$id){
				$father[]=$v;
				$id=$v['parent_id'];
			}
		}
	}
	return $father;
}

마지막 으로 자손 의 결점 을 찾 는 것 을 실현 하 다.앞에서 자 결점 을 찾 는 것 이 실현 되 었 고 자손 결점 은 바로 자 결점 을 바탕 으로 자 결점 을 찾 아 차례대로 유추 하여 자 결점 이 없 을 때 까지 하 는 것 이다.이 논리 에 따 르 면 우 리 는 재 귀 를 이용 하여 실현 할 수 있 습 니 다. 코드 는 다음 과 같 습 니 다.
function sub_tree($arr,$id,$lev=0){
	static $sub=array();
	foreach ($arr as $k => $v) {
		if($v['parent_id']==$id){
			$v['lev']=$lev;
			$sub[]=$v;
			sub_tree($arr,$v['cat_id'],$lev+1);
		}
	}
	return $sub;
}

$v['lev']=$lev;자손 나무 에 맺 힌 깊이 를 기록 하 는 데 쓰 인 다.
자손 결산 점 을 찾 아 도 스 택 을 사용 하여 실현 할 수 있 습 니 다. 코드 는 다음 과 같 습 니 다.
function sub_tree($arr,$id){
	$stack=array();
	$sub=array();

	foreach ($arr as $k => $v) {
		if($v['cat_id']==$id){
			$stack[]=$v;
		}	
	}

	while($stack){
		$row=array_pop($stack);
		$sub[]=$row;
		foreach ($arr as $k => $v) {
		if($v['parent_id']==$row['cat_id']){
			$stack[]=$v;
		}	
	}
	}
	return $sub;
}

좋은 웹페이지 즐겨찾기