Как создать многомерный массив из списка?

У меня есть список категорий в 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")) ); 

На самом деле, ключ / значение не важны, так как я буду работать с другими столбцами. Я просто хочу знать, как отсканировать список и создать многоуровневый список.

Очень простая рекурсия для построения древовидной структуры:

 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' ключа обычно предпочтительнее структуры, которую вы предлагаете, но не стесняйтесь изменять по мере необходимости.