인접력 목록 방법을 사용하여 계층 적으로 저장된 SQL 데이터로부터 다차원 배열을 어떻게 생성합니까?

StackOverflow https://stackoverflow.com/questions/1273972

문제

SQL의 계층 적 데이터

인접력 목록 모델

내 모델에는 일련의 객체가 있으며 각 객체가 있으며 각 객체는 부모 ID와 함께 저장됩니다. 인접성 목록 모델을 계층 구조 방법으로 사용하고 있습니다.

인접성 목록의 모든 예는 단순히 그 다음에 출력합니다. 아무도 결과 세트에서 다차원 배열을 만들려고하지 않습니다.

---------------
| id | parent |
---------------
| 1  | NULL   |
| 2  | 1      |
| 3  | 1      |
| 4  | 2      |
| 5  | 2      |
| 6  | 5      |
---------------

물체

수업에서 'children'이라는 배열 변수를 만들었고 DB 쿼리에서 아이를 찾을 때마다 어린이 객체를 추가하고 싶습니다.

각 객체 내에 배열을 생성하고 후속 객체를 저장하는 것은 잘못된 느낌입니다. 개체 배열을 별도로 만들 수 없습니까? 이렇게하면 배열을 볼 때 배열을 가로 지르기가 어려울 수 있습니다.

나는이 문제가 잘못된 방식으로 접근하고 있다고 생각합니까?

이보다 PHP 배열을 사용하는 더 똑똑한 방법이 있습니까?

도움이 되었습니까?

해결책

어린이의 배열은 수업의 일부일 필요는 없습니다. 하나의 노드가 물체와 어린이를 포함하는 해시 인 곳에서 항상 임시 트리를 만들 수 있습니다. 나는 PHP를 모르지만 다음과 같은 것처럼 보일 것입니다.

{
    object => $row1,
    children => [
        {
            object => $row2,
            children => [ ... ],
        }, {
            object => $row3,
            children => [],
        }
    ]
}

다른 팁

배열이 되려면 필요합니까? 옵션은 객체가 이와 같은 재귀 적 계층 구조를 구현하도록하는 것일 수 있습니다.

http://www.php.net/~helly/php/ext/spl/classrecursivearrayiterator.html

물체를 아이로 추가하고 여전히 어레이와 같은 방식으로 구조를 이동할 수 있습니다.

SPL에 대한 문서는 드물지만 좋은 통과 가능한 구조, 인터페이스 및 클래스를 제공합니다. 웹에 좋은 튜토리얼이 그것에 대해 존재합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top