>백엔드 개발 >PHP 튜토리얼 >전기 충격 중국어 음역 php 무제한 분류 학습 참조 분석 ecshop 무제한 분류 상세 메모 포함

전기 충격 중국어 음역 php 무제한 분류 학습 참조 분석 ecshop 무제한 분류 상세 메모 포함

WBOY
WBOY원래의
2016-07-29 08:42:161176검색

코드 복사 코드는 다음과 같습니다.


function cat_options($spec_cat_id, $arr)
{
static $ cat_options = array ();
if (isset($cat_options[$spec_cat_id]))
{
return $cat_options[$spec_cat_id];
/*
초기화 키 매개변수:
$level: 현재 하위 노드 깊이
$last_cat_id: 현재 상위 노드 ID
$options: 들여쓰기 수준이 있는 배열
$cat_id_array: 동일한 경로를 따라 상위 노드가 순서대로 배치됩니다
$ level_array: 이 노드의 하위 노드 깊이도 순서대로 입력됩니다.
*/
if (!isset($cat_options[0]))
{
$level = $last_cat_id = 0;
$options = $cat_id_array = $level_array = array();
while (!empty($arr))//아직 구축할 노드가 있으면 계속 순회
{
foreach ($arr AS $key => $value)
{
$cat_id = $value['cat_id']
//레벨 1 분류 노드
if ($level == 0 && $last_cat_id == 0 )
{
if ($value['parent_id'] > 0)
{
break
}
$options[$cat_id] = $value
$options[$cat_id]['level'] = $level
$options[$cat_id]['id'] = $cat_id; 'name'] = $value ['cat_name']
//순회 후 더 이상 순회하지 않음
unset($arr[$key])
if ($value['has_children'] = = 0)
{
continue;
}
$last_cat_id = $cat_id;//하위 노드의 상위 노드
$cat_id_array = array($cat_id); level_array[$last_cat_id] = $level;
continue;
}
//현재 노드의 상위 노드 ID가 해당 상위 노드 ID와 같습니다.
if ($value['parent_id'] == $last_cat_id )
{
$options[$cat_id] = $value;
$options[$cat_id]['level'] = $level
$options[$cat_id][ 'id'] = $cat_id;
$options[$cat_id]['name'] = $value['cat_name']
unset($arr[$key]);//이후에는 더 이상 순회하지 않습니다. 반복
//현재 노드에 하위 노드가 있는 경우 현재 노드는 배치되지만 통과되지 않습니다. 그렇지 않으면 배치되지 않고 다시 통과되지 않습니다.
if ($value['has_children' ] > 0)
{
if (end($cat_id_array) != $last_cat_id)
{
$cat_id_array[] = $last_cat_id
$last_cat_id; cat_id;//현재 노드가 다음 레벨 노드의 새로운 상위 노드로 사용되는 경우
$cat_id_array[] = $cat_id;//정산
$level_array[$last_cat_id] = $level;//The 현재 노드의 다음 레벨 노드의 깊이
}
}
elseif ($value['parent_id'] > $last_cat_id)
{//현재 노드의 상위 노드의 깊이가 다음과 같은 경우 현재 상위 노드의 깊이보다 크면 다음 주기로 진행
break
}
}//endforeach
$count = count($cat_id_array)
if ($count > 1)
{
//가장 마지막에 있는 상위 노드를 현재 상위 노드로 사용합니다.
$last_cat_id = array_pop($cat_id_array)
}
elseif ($count == 1)
{
if ($last_cat_id != end( $cat_id_array))
{
//상주하는 상위 노드가 하나만 있고 현재 상위 노드로 사용되지 않는 경우 , 제거
$last_cat_id = end($cat_id_array);
}
else
{ //그렇지 않으면 마지막으로 검색된 상위 노드는 첫 번째 수준 분류 노드여야 합니다.
$level = 0;
$last_cat_id = 0;
$cat_id_array = array();
계속
}
}
if ($last_cat_id && isset($level_array[$last_cat_id]) )
{
//현재 노드의 깊이를 가져옵니다
$level = $ level_array[$last_cat_id]
}
else
{
$level = 0;
}
}//end 현재 트리를 구성하기 위한 비재귀적 선주문 순회 작업이 완료되었습니다. 여기서 $options는 루트 노드
$cat_options[0] = $options;
}
else
{
$options = $cat_options[0]
}
//전체 tree는 0부터 시작하여 처리 없이 직접 반환됩니다.
if (!$spec_cat_id)
{
return $options
} //그렇지 않으면 가로채기를 시작합니다. 다음은 비교적 간단합니다. 몇 가지 매개변수의 의미에 대해 이야기하겠습니다.
/*
$ spec_cat_id_level: 가로채는 노드의 깊이
$ spec_cat_id_array: 이 노드를 루트 노드로 하는 최종 반환된 제품 분류 트리
최종 반환된 배열은 다음과 같이 정렬됩니다. 상위 노드의 크기 기준, 직접 상위 노드는 동일한 루트에 따라 순회됩니다. 예:
첫 번째 수준 노드는 1,5, 두 번째 수준 노드는 2,6,7, 세 번째 수준 노드는 8,9입니다. 1의 직계 자식은 2입니다. ,6과 2의 직계 자식은 8,9입니다. 또한
5의 직계 자식은 7입니다. 그러면 최종 배열은 다음과 같이 배열됩니다. 1->2->8->9-> ;6->5->7
*/
else
{
if (empty($options[$spec_cat_id]))
{
return array() ;
}
$spec_cat_id_level = $options[$spec_cat_id]['level']
foreach ($options AS $key => $value)
{
if ($key ! = $spec_cat_id)
{
unset($options[$key])
}
else
{
break
}
}
$ spec_cat_id_array = array();
foreach ($options AS $key => $value)
{
if (($spec_cat_id_level == $value['level'] && $value['cat_id ' ] != $spec_cat_id) ||
($spec_cat_id_level > $value['level']))
{
break
}
else
{
$ spec_cat_id_array[$key] = $value;
}
}
$cat_options[$spec_cat_id] = $spec_cat_id_array;
return $spec_cat_id_array; >

위 내용은 전기충격 중국어 음역을 포함하여 자세한 주석과 함께 ecshop 무한 분류 학습 참고 분석을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.