2011-10-25 2 views
0

부모 ID가있는 MySQL의 범주 목록이 있습니다. 목록에서 PHP 배열을 어떻게 만들 수 있습니까? 나도 다른 열이 작동으로목록에서 다차원 배열을 만드는 방법은 무엇입니까?

ID Category  Parent_ID 
1 Car   NULL 
2 Education  NULL 
3 Mathematics 2 
4 Physics  2 
5 Astrophysics 4 

내가이 구조 사실

array(
    "Car" => "1", 
    "Education" => array("Mathematics" => "2", "Physics" => array("Astrophysics" => "4")) 
); 

의 배열을 생성하려면, 키/값은 중요하지 않습니다. 목록을 스캔하고 여러 수준의 목록을 작성하는 방법을 알고 싶습니다.

+2

배열의 열쇠는 무엇입니까? 배열을 어떻게 보이게할까요? 너 assoc 싶어. 정렬? 또는 각 행을 객체로 저장 하시겠습니까? – DarthVader

+0

질문에 샘플 배열을 추가했습니다 : – Googlebot

답변

5

트리 구조 구축하는 매우 간단한 재귀 :

function buildTree(array $data, $parent = null) { 
    $branch = array(); 

    foreach ($data as $row) { 
     if ($row['parent_id'] == $parent) { 
      $row['children'] = buildTree($data, $row['id']); 
      $branch[] = $row; 
     } 
    } 

    return $branch; 
} 

$tree = buildTree($rowsFromDatabase); 

명시 적 'children' 키를 갖는 당신이 제안하고있는 구조 일반적으로 바람직하지만 필요에 따라 수정하여 주시기 바랍니다.

+0

'$ parent = null'은'$ parent = "이어야합니다" "mysql은 null 값에 빈 문자열을 반환합니다. 그 외 +1. – Louis

+0

@Louis 네 말이 맞아. 우리는 느슨하게 비교하기 때문에 여전히 올바르게 작동합니다. :) – deceze

+1

@deceze [one loop] (http://stackoverflow.com/a/11240578/697154)로만 가능하며 n * n 루프는 필요 없습니다. ;) – Yoshi

관련 문제