Build a tree from a flat array in PHP

I’ve looked around the internet and haven’t quite found what I’m looking for. I have a flat array with each element containing an ‘id’ and a ‘parent_id’. Each element will only have ONE parent, but may have multiple children. If the parent_id = 0, it is considered a root level item. I’m trying to get my flat array into a tree. The other samples I have found only only copy the element to the parent, but the original still exists.

EDIT

Each element of the starting array is read from a separate XML file. The file itself will have ‘0’ as the value for parent_id if it doesn’t have a parent. The keys are actually strings.

Because you have abused 0 as both a ‘magic’ number as root, and an existing id, we now have recursion in the id=0 branch. Adding if($item['parent_id']!=$item['id']) before $tree[$item['parent_id']]['children'][] = &$tree[$item['id']]; could prevent that, but it isn’t pretty.

You want to be looking at storing and loading hierarchical data in MySQL as I this should solve a few problems. I’m assuming that the first array represents data taken directly from the database?

It looks like you’re trying to use the adjacency model to organize your data into the hierarchy structure. There are also other ways to achieve this using nesting. If you are not taking this data from a database then this may not be as useful.