fork download
  1. <?php
  2.  
  3. $array = array(
  4. 'Rank_Order' => 'Hemiptera',
  5. 'Rank_Family' => 'Miridae',
  6. 'Rank_Genus' => 'Kanakamiris',
  7. 'Rank_Species' => ''
  8. ),
  9. 'Rank_Order' => 'Hemiptera',
  10. 'Rank_Family' => 'Miridae',
  11. 'Rank_Genus' => 'Neophloeobia',
  12. 'Rank_Species' => 'incisa'
  13. ),
  14. 'Rank_Order' => 'Hemiptera',
  15. 'Rank_Family' => 'Noridae',
  16. 'Rank_Genus' => 'Canelbia',
  17. 'Rank_Species' => 'Arissa'
  18. )
  19. );
  20. $levels = array('Rank_Order', 'Rank_Family', 'Rank_Genus', 'Rank_Species');
  21.  
  22. function get_children($parent, $lev, $orig, $levels){
  23. if($lev + 1 > count($levels)){
  24. return array();
  25. }
  26.  
  27. $seen = array();
  28. $children = array();
  29. foreach($orig as $node){
  30. if($node[$levels[$lev]] == $parent && !in_array($node[$levels[$lev+1]], $seen)){
  31. $seen[] = $node[$levels[$lev+1]];
  32. $children[] = get_children($node[$levels[$lev+1]], $lev+1, $orig, $levels);
  33. }
  34. }
  35. return array('name' => $parent, 'children' => $children);
  36. }
  37.  
  38. function hier($orig, $levels){
  39. $seen = array();
  40. foreach($orig as $node){
  41. if(!in_array($node[$levels[0]], $seen)){
  42. $seen[] = $node[$levels[0]];
  43. $result[] = get_children($node[$levels[0]], 0, $orig, $levels);
  44. }
  45. }
  46. return $result;
  47. }
  48.  
  49. print_r($array);
  50. print_r(hier($array, $levels));
  51.  
  52. ?>
Success #stdin #stdout 0.04s 13112KB
stdin
Standard input is empty
stdout
Array
(
    [0] => Array
        (
            [Rank_Order] => Hemiptera
            [Rank_Family] => Miridae
            [Rank_Genus] => Kanakamiris
            [Rank_Species] => 
        )

    [1] => Array
        (
            [Rank_Order] => Hemiptera
            [Rank_Family] => Miridae
            [Rank_Genus] => Neophloeobia
            [Rank_Species] => incisa
        )

    [2] => Array
        (
            [Rank_Order] => Hemiptera
            [Rank_Family] => Noridae
            [Rank_Genus] => Canelbia
            [Rank_Species] => Arissa
        )

)
Array
(
    [0] => Array
        (
            [name] => Hemiptera
            [children] => Array
                (
                    [0] => Array
                        (
                            [name] => Miridae
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [name] => Kanakamiris
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [name] => 
                                                            [children] => Array
                                                                (
                                                                    [0] => Array
                                                                        (
                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                    [1] => Array
                                        (
                                            [name] => Neophloeobia
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [name] => incisa
                                                            [children] => Array
                                                                (
                                                                    [0] => Array
                                                                        (
                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [name] => Noridae
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [name] => Canelbia
                                            [children] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [name] => Arissa
                                                            [children] => Array
                                                                (
                                                                    [0] => Array
                                                                        (
                                                                        )

                                                                )

                                                        )

                                                )

                                        )

                                )

                        )

                )

        )

)