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

Popular posts from this blog

php - Why I am getting the Error "Commands out of sync; you can't run this command now" -

linux - Does gcc have any options to add version info in ELF binary file? -

java - Are there any classes that implement javax.persistence.Parameter<T>? -