Kod: 
	
 $cats = get_stuff("SELECT * FROM categories ORDER BY parent_id ASC"); 
$lowest_level = $cats['0']['parent_id']; // hitta lägsta parent_id 
$cat_arr = array(); 
foreach($cats as $ca){ 
  $cat_arr['rela'][$ca['parent_id']][] = $ca['id']; 
  $cat_arr['data'][$ca['id']] = $ca; 
} 
 
echo '<select name="parent">'.traverse_stuff($cat_arr, $lowest_level, 0, 0).'</select>'; 
 
function traverse_stuff($cat_arr, $parent, $level, $select_id){ 
  $output = ''; 
    foreach($cat_arr['rela'][$parent] as $ca){ 
      $output .= '<option value="'.$ca.'" '.(($select_id == $ca) ? 'selected="selected"' : '').'>'.str_repeat(' ', $level).'|__'.$cat_arr['data'][$ca]['name'].'</option>'; 
      if(!isset($cat_arr['rela'][$ca])){continue;} // $ca har inga barn, gå vidare 
      $output .= traverse_stuff($cat_arr, $ca, $level+1, $select_id); 
    } 
  return $output; 
} 
 Bara ett databasanrop krävs, klarar oändligt med nivåer.  
	 |