$dataValue) { if ($dataValue[$parentKeyName] == 0 || !$dataValue[$parentKeyName]) { $returnArray[$j] = $dataValue; unset($dataArray[$dataKey]); $j++; } } foreach ($dataArray as $dataKey => $dataValue) { for ($i = 0; $i < count($returnArray); $i++) { if ($dataValue[$parentKeyName] == $returnArray[$i][$idKeyName]) { $pos = $i; break; } else { $pos = -1; } } if($pos != -1) { $dataValue['depth'] = $returnArray[$pos]['depth'] + 1; $returnArray[$pos]['children'] += 1; $returnArray = InsertAfter($returnArray, $pos, $dataValue); unset($dataArray[$dataKey]); } else { $returnArray[] = $dataValue; } } $tempReturnArray = array(); foreach($returnArray as $value) { $tempReturnArray[$value[$idKeyName]] = $value; } return $tempReturnArray; } $testArray = array( 0 => array( 'id' => 1, 'name' => 'test #1', 'parentid' => 0 ), 1 => array( 'id' => 2, 'name' => 'test #2', 'parentid' => 1 ), 2 => array( 'id' => 3, 'name' => 'test #3', 'parentid' => 1 ), 3 => array( 'id' => 4, 'name' => 'test #4', 'parentid' => 2 ), 4 => array( 'id' => 5, 'name' => 'test #5', 'parentid' => 4 ), 5 => array( 'id' => 6, 'name' => 'test #6', 'parentid' => 99 ), 6 => array( 'id' => 7, 'name' => 'test #7', 'parentid' => 76 ), 7 => array( 'id' => 8, 'name' => 'test #8', 'parentid' => 6 ) ); print "
".print_r(HierList($testArray, 'id', 'parentid'), 1).""; ?>