$arrCategoryTree = array(); while ($result_row = mysql_fetch_row($objRS)) { $arrCategoryTree[] = array ( 'category_id' => $result_row[0], 'parent_category_id' => $result_row[1], 'category_name' => $result_row[2] ); } //var_dump ($arrCategoryTree); function tree($id_parent = 0, $indent = 0) { global $arrCategoryTree, $ret_tree; $tt = array(); $x = 0; $loop = 0; foreach($arrCategoryTree as $n) { if( $n['parent_category_id'] == $id_parent) { $tt[$x++] = $loop; } $loop++; } /*-- if there are some parent ids --*/ if( $x != 0){ foreach($tt as $d) { $tmp = array(); foreach($arrCategoryTree[$d] as $key => $value) { $tmp[$key] = $value; } $tmp['indent'] = $indent; $ret_tree[] = $tmp; tree($tmp['category_id'], $indent+1); } } else { return; } } $ret_tree = array(); tree(0,0); foreach($ret_tree as $cat) { $indent = ''; $indent .= str_repeat ("\t", $cat['indent']); if ($intPreviousIndent <= $cat['indent']) echo ("\n"); echo ($indent . $cat['category_name']); //target structure /* < category name="subfolder2.1" id="3"/> */ //current structure /* array(13) { [0]=> array(4) { ["category_id"]=> string(1) "1" ["parent_category_id"]=> string(1) "0" ["category_name"]=> string(8) "My Media" ["indent"]=> int(0) } [1]=> array(4) { ["category_id"]=> string(1) "2" ["parent_category_id"]=> string(1) "1" ["category_name"]=> string(6) "School" ["indent"]=> int(1) } [2]=> array(4) { ["category_id"]=> string(1) "3" ["parent_category_id"]=> string(1) "2" ["category_name"]=> string(13) "English Class" ["indent"]=> int(2) } [3]=> array(4) { ["category_id"]=> string(1) "4" ["parent_category_id"]=> string(1) "2" ["category_name"]=> string(13) "Spanish Class" ["indent"]=> int(2) } [4]=> array(4) { ["category_id"]=> string(1) "5" ["parent_category_id"]=> string(1) "1" ["category_name"]=> string(13) "Family Photos" ["indent"]=> int(1) } [5]=> array(4) { ["category_id"]=> string(1) "6" ["parent_category_id"]=> string(1) "1" ["category_name"]=> string(13) "Sports Photos" ["indent"]=> int(1) } [6]=> array(4) { ["category_id"]=> string(1) "7" ["parent_category_id"]=> string(1) "6" ["category_name"]=> string(6) "Soccer" ["indent"]=> int(2) } [7]=> array(4) { ["category_id"]=> string(1) "8" ["parent_category_id"]=> string(1) "6" ["category_name"]=> string(10) "Basketball" ["indent"]=> int(2) } [8]=> array(4) { ["category_id"]=> string(1) "9" ["parent_category_id"]=> string(1) "6" ["category_name"]=> string(8) "Football" ["indent"]=> int(2) } [9]=> array(4) { ["category_id"]=> string(2) "10" ["parent_category_id"]=> string(1) "1" ["category_name"]=> string(11) "My 2nd Main" ["indent"]=> int(1) } [10]=> array(4) { ["category_id"]=> string(2) "11" ["parent_category_id"]=> string(2) "10" ["category_name"]=> string(14) "2nd Main Sub-1" ["indent"]=> int(2) } [11]=> array(4) { ["category_id"]=> string(2) "12" ["parent_category_id"]=> string(2) "11" ["category_name"]=> string(14) "2nd Main Sub-2" ["indent"]=> int(3) } [12]=> array(4) { ["category_id"]=> string(2) "13" ["parent_category_id"]=> string(2) "10" ["category_name"]=> string(16) "2nd Main Sub-1-1" ["indent"]=> int(2) } }*/ $intPreviousIndent = $cat['indent']; }