mysql - Setup an array in php with children nodes -
i have following data table:
+----+---------+-----+---------+--------------+ | id | name | id2 | sname | relation | +----+---------+-----+---------+--------------+ | 1 | albaraa | 2 | brandon | friend | | 1 | albaraa | 3 | shen | friend | | 1 | albaraa | 4 | dan | professor | | 1 | albaraa | 5 | bob | boss | | 1 | albaraa | 6 | al | god father | | 2 | brandon | 5 | bob | friend | | 3 | shen | 1 | albaraa | friend | | 3 | shen | 2 | brandon | friend | | 3 | shen | 4 | dan | professor | | 4 | dan | 1 | albaraa | student | | 4 | dan | 2 | brandon | student | | 4 | dan | 3 | shen | student | | 5 | bob | 6 | al | best friend | | 6 | al | 1 | albaraa | god son | | 6 | al | 5 | bob | best friends | +----+---------+-----+---------+--------------+ i data in php array format:
array ( [0] => array ( [id] => 1 [name] => albaraa [id2] => 2 [sname] => brandon [relation] => friend ) [1] => array ( [id] => 1 [name] => albaraa [id2] => 3 [sname] => shen [relation] => friend ) [2] => array ( [id] => 1 [name] => albaraa [id2] => 4 [sname] => dan [relation] => professor ) [3] => array ( [id] => 1 [name] => albaraa [id2] => 5 [sname] => bob [relation] => boss ) [4] => array ( [id] => 1 [name] => albaraa [id2] => 6 [sname] => al [relation] => god father ) [5] => array ( [id] => 2 [name] => brandon [id2] => 5 [sname] => bob [relation] => friend ) [6] => array ( [id] => 3 [name] => shen [id2] => 1 [sname] => albaraa [relation] => friend ) [7] => array ( [id] => 3 [name] => shen [id2] => 2 [sname] => brandon [relation] => friend ) [8] => array ( [id] => 3 [name] => shen [id2] => 4 [sname] => dan [relation] => professor ) [9] => array ( [id] => 4 [name] => dan [id2] => 1 [sname] => albaraa [relation] => student ) [10] => array ( [id] => 4 [name] => dan [id2] => 2 [sname] => brandon [relation] => student ) [11] => array ( [id] => 4 [name] => dan [id2] => 3 [sname] => shen [relation] => student ) [12] => array ( [id] => 5 [name] => bob [id2] => 6 [sname] => al [relation] => best friend ) [13] => array ( [id] => 6 [name] => al [id2] => 1 [sname] => albaraa [relation] => god son ) [14] => array ( [id] => 6 [name] => al [id2] => 5 [sname] => bob [relation] => best friends ) ) what need set data array has first person added , there children added , children's children added, looks (made more readable guys =]):
array ( [id] => 0 [name] => albaraa [children] => array ( [0] => array ( [id] => 1 [name] => brandon [data] => array ( [relationto] => albaraa [relation] => friend ) [children] => array ( [id] => 2 [name] => bob [data] => array ( [relationto] => brandon [relation] => friend ) [children] => array() ) ...and on )) i have outputs above without children having children (just empty array) not sure on how correctly, have tried class failed...so on how data above 1 appreciated!
here's php way it, without optimization @ all. can use sql joins array looks pretty close result well.
// set root stuff $person1 = $arr[0]; $new_arr = []; $new_arr['id'] = 0; $new_arr['name'] = $arr['name']; // find children foreach ($arr $child){ // if found child if ($child['sname'] == $person1['name']){ // set data $child_arr = []; $child_arr['id'] = $child['id']; $child_arr['name'] = $child['name']; $child_arr['data']['relationto'] = $child['sname']; $child_arr['data']['relation'] = $child['relation']; $new_arr['children'][] = $child_arr; // find grandchildren foreach ($arr $gc){ // if found grandchild if ($gc['sname'] == $child['name']){ // set data $gc_arr = []; $gc_arr['id'] = $gc['id']; $gc_arr['name'] = $gc['name']; $gc_arr['data']['relationto'] = $gc['sname']; $gc_arr['data']['relation'] = $gc['relation']; $gc_arr['children'] = []; // assuming didn't want go deeper $child_arr['children'][] = $gc_arr; } } } } if wanted go deeper, need introduce recursion.
Comments
Post a Comment