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.