Como criar matrizes multidimensionais a partir de uma lista?

Eu tenho uma lista de categorias no MySQL com ID do pai. Como posso criar uma matriz PHP da lista.

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

Eu quero produzir uma matriz dessa estrutura

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

De fato, a chave / valor não é importante, pois também trabalharei com outras colunas. Eu só quero saber como verificar a lista e produzir uma lista de vários níveis.

Uma recursion muito simples para construir uma estrutura de tree:

 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); 

Ter uma chave explícita de 'children' geralmente é preferível à estrutura que você propõe, mas sinta-se à vontade para modificar conforme necessário.