1. 웹 사이트를 구축하는 사람들은 일반적으로 분류 처리 문제에 직면합니다. 다음은 무제한 분류 처리의 몇 가지 예입니다
데이터베이스의 구조는 매우 간단합니다:
id, fatcher_id, name, ...
이러한 디자인은 짧고 간결하며 대부분의 요구 사항을 충족할 수 있습니다.
1. 가장 끔찍한 방법은 다음과 같습니다. ~
카테고리 1
카테고리 1.1
카테고리 1.1.1
카테고리 1.2
카테고리 2
카테고리 2.1
카테고리 3
카테고리를 구현하는 가장 좋은 방법이기도 합니다. 3.1
> 카테고리 3.2
...
이러한 디렉토리 구조를 생성하기 위해 프로그램은 분류(페이지 넘김, 쿼리...)가 포함될 때마다 데이터베이스를 한 번 반복적으로 쿼리합니다. 하드디스크를 비극적으로 운영...아멘~그러자~뛰어가자...
2. 데이터베이스를 한 번 쿼리하면 재귀 배열이 위 디렉터리 구조를 생성합니다
일반 아이디어 게시
함수 SelectList(& $Data , $RootID = 0')
{
for($i = 0; $i < count($Data); $i )
{
if($Data[$i ][ 'UID'] == $RootID) 데이터[$i ]['ID'], $blank, $Match);
웹사이트 시스템이면 충분해요~ 그런데 BT 포인트가 생기면 거기에 여러 개의 K 또는 심지어 W 범주가 있습니다. 동시성을 고려하면 100밀리초 이상이 걸릴 수 있습니다. 하하~ 다시 점프해 보겠습니다.
3. 데이터베이스를 한 번 쿼리하고 비재귀적으로 디렉터리 구조를 생성합니다.
이 단계에서는 , 프로그램의 트릭이 나옵니다 ~ 위의 디렉토리 구조는 결과를 한 번만 탐색하여 생성할 수 있습니다. 웹 페이지의 표시 스타일로 포맷하는 것은 매우 쉽습니다. 편리합니다 ~ 다음은 다른 사람이 작성한 것입니다. 시도해봐도 완벽하게 작동합니다
function GetArray($RootID = 0)
{
$Data = array()
$Data = $tblObj-> ;MapResult($tblObj-> Select());
$Output = Array();
$len = Count($Data)
if($RootID )
{
while($Data[$i]['UID'] != $RootID && $i < $len) $i ;
}
$UpID = $RootID; 이전 노드
for($cnt = Count($Data); $i < $cnt;) //전체 카테고리 배열 순회
{
$j = 0 //하위 초기화; 이 카테고리에 속하는 카테고리 데이터 수
$ ['uID'] == $ upid && $ i & lt; $ len) // 이전 노드가 형제 노드인지 판단
{
$ 출력 [$ j] = $ 데이터 [$i]; >
else
{
while($Data[$i]['UID'] == $UpID && $i < $len)
{ $UpID ])
{
$tmp[$UpID]['Child'][$j] = $Data[$i];
$tmp[$Data[$i]['ID']] = &$tmp[$UpID]['Child'][$j]; //保存该节点ID가 출력중의 位置
}
$i ;
$j ;
}
}
$UpID = $Data[$i]['UID'];
}
$Output을 반환합니다.
}
프로그램이 너무 피곤해 보이네요~ 이 코드는 이전 코드보다 효율성이 10배 이상 빠르고 강도도 충분히 강합니다...
그런데...90%의 웹사이트가 이 코드를 사용하고 있습니다. 아깝네요~ 제가 접한 웹사이트 분류는 대체적으로 4레벨 이하인데, 더 최적화할 수 있을까요?... 다시 점프해보겠습니다...
4. 데이터베이스부터 시작해보세요~
구조를 살짝 변경해 보세요. 데이터베이스를 만들고 레이어에 대한 중복 필드를 추가합니다. 이것은 db 설계 전문가가 생각한 것입니다.
id 이름 father_id 레이어
1 전체 카테고리 1 카테고리 1.2 2 010200
5 카테고리 2 1 020000
6 카테고리 2.1 5 020100
7 카테고리 3 1 030000
8 카테고리 3.1 7 030100
9 카테고리 3.2 7 030200
10 카테고리 1.1.1 3 010101
이제 사이즈로 검색해보세요 레이어의: SELECT * FROM Type_table_2 ORDER BY type_layer
List 레코드 세트는 다음과 같습니다.
id 이름 father_id 레이어
1 전체 카테고리 0 000000
2 카테고리 1 1 010000
3 카테고리 1.1 2 010100
10 카테고리 1.1.1 3 010101
4 카테고리 1.2 2 010200
5 카테고리 2 1 020000
6 카테고리 2.1 5 0201 00
7 카테고리 3 1 030000
8 카테고리 3.1 7 030100
9 카테고리 3.2 7 030200
보셨나요? 디렉토리 구조도 하나의 쿼리로 생성되므로 레이어 필드를 유지하는 데 더 많은 작업이 필요합니다. 이 루틴에서는 레이어 필드가 각 수준에서 99개의 카테고리를 처리할 수 있습니다. BT Application입니다. 좀 더 크게 만들어 보세요. 하하, 먼저 요구 사항을 분석하세요
OK~OVER~SHANGREN~
위 내용은 PHP에서 무제한 분류를 구현하기 위한 몇 가지 아이디어를 소개합니다. 여기에는 액세스할 수 없으며 네트워크 리소스를 사용할 권한이 없을 수도 있다는 내용도 포함되어 있습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.