<?php
$data = array();
$data[] = array('id' => 1, 'parent' => 0);
$data[] = array('id' => 2, 'parent' => 1);
$data[] = array('id' => 3, 'parent' => 1);
$data[] = array('id' => 4, 'parent' => 1);
$data[] = array('id' => 5, 'parent' => 1);
$data[] = array('id' => 6, 'parent' => 2);
$data[] = array('id' => 7, 'parent' => 3);
$data[] = array('id' => 8, 'parent' => 3);
$data[] = array('id' => 9, 'parent' => 7);
$data[] = array('id' => 10, 'parent' => 1);
$data[] = array('id' => 11, 'parent' => 8);
$data[] = array('id' => 12, 'parent' => 4);
$stack = array();
$items = array();
while ($row = array_shift($data)){
$row['id'] = (int) $row['id'];
$row['parent'] = (int) $row['parent'];
// child schon da, aber parent noch nicht!
if (isset($items[$row['id']])){
$tmp = $items[$row['id']]['children'];
$items[$row['id']] = $row;
$items[$row['id']]['children'] = $tmp;
}else{
$items[$row['id']] = $row;
}
$items[$row['parent']]['children'][$row['id']] =& $items[$row['id']];
}
print '<pre>';
print_r($items);
print '</pre>';
?>