<?php
'Rank_Order' => 'Hemiptera',
'Rank_Family' => 'Miridae',
'Rank_Genus' => 'Kanakamiris',
'Rank_Species' => ''
),
'Rank_Order' => 'Hemiptera',
'Rank_Family' => 'Miridae',
'Rank_Genus' => 'Neophloeobia',
'Rank_Species' => 'incisa'
),
'Rank_Order' => 'Hemiptera',
'Rank_Family' => 'Noridae',
'Rank_Genus' => 'Canelbia',
'Rank_Species' => 'Arissa'
)
);
$levels = array('Rank_Order', 'Rank_Family', 'Rank_Genus', 'Rank_Species');
function get_children($parent, $lev, $orig, $levels){
if($lev + 1 > count($levels)){ }
foreach($orig as $node){
if($node[$levels[$lev]] == $parent && !in_array($node[$levels[$lev+1]], $seen)){ $seen[] = $node[$levels[$lev+1]];
$children[] = get_children($node[$levels[$lev+1]], $lev+1, $orig, $levels);
}
}
return array('name' => $parent, 'children' => $children); }
function hier($orig, $levels){
foreach($orig as $node){
if(!in_array($node[$levels[0]], $seen)){ $seen[] = $node[$levels[0]];
$result[] = get_children($node[$levels[0]], 0, $orig, $levels);
}
}
return $result;
}
?>
PD9waHAKCiRhcnJheSA9IGFycmF5KAoJYXJyYXkoCiAgICAgICAgICAgICdSYW5rX09yZGVyJyA9PiAnSGVtaXB0ZXJhJywKICAgICAgICAgICAgJ1JhbmtfRmFtaWx5JyA9PiAnTWlyaWRhZScsCiAgICAgICAgICAgICdSYW5rX0dlbnVzJyA9PiAnS2FuYWthbWlyaXMnLAogICAgICAgICAgICAnUmFua19TcGVjaWVzJyA9PiAnJwogICAgICAgICksCglhcnJheSgKICAgICAgICAgICAgJ1JhbmtfT3JkZXInID0+ICdIZW1pcHRlcmEnLAogICAgICAgICAgICAnUmFua19GYW1pbHknID0+ICdNaXJpZGFlJywKICAgICAgICAgICAgJ1JhbmtfR2VudXMnID0+ICdOZW9waGxvZW9iaWEnLAogICAgICAgICAgICAnUmFua19TcGVjaWVzJyA9PiAnaW5jaXNhJwogICAgICAgICksCiAgICAJYXJyYXkoCiAgICAgICAgICAgICdSYW5rX09yZGVyJyA9PiAnSGVtaXB0ZXJhJywKICAgICAgICAgICAgJ1JhbmtfRmFtaWx5JyA9PiAnTm9yaWRhZScsCiAgICAgICAgICAgICdSYW5rX0dlbnVzJyA9PiAnQ2FuZWxiaWEnLAogICAgICAgICAgICAnUmFua19TcGVjaWVzJyA9PiAnQXJpc3NhJwogICAgICAgICkKKTsKICAgICAkbGV2ZWxzID0gYXJyYXkoJ1JhbmtfT3JkZXInLCAnUmFua19GYW1pbHknLCAnUmFua19HZW51cycsICdSYW5rX1NwZWNpZXMnKTsKCiAgICAgZnVuY3Rpb24gZ2V0X2NoaWxkcmVuKCRwYXJlbnQsICRsZXYsICRvcmlnLCAkbGV2ZWxzKXsKICAgICAgICAgaWYoJGxldiArIDEgPiBjb3VudCgkbGV2ZWxzKSl7CiAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgIH0KCiAgICAgICAgICRzZWVuID0gYXJyYXkoKTsKICAgICAgICAgJGNoaWxkcmVuID0gYXJyYXkoKTsKICAgICAgICAgZm9yZWFjaCgkb3JpZyBhcyAkbm9kZSl7CiAgICAgICAgICAgICBpZigkbm9kZVskbGV2ZWxzWyRsZXZdXSA9PSAkcGFyZW50ICYmICFpbl9hcnJheSgkbm9kZVskbGV2ZWxzWyRsZXYrMV1dLCAkc2VlbikpewogICAgICAgICAgICAgICAgICRzZWVuW10gPSAkbm9kZVskbGV2ZWxzWyRsZXYrMV1dOwogICAgICAgICAgICAgICAgICRjaGlsZHJlbltdID0gZ2V0X2NoaWxkcmVuKCRub2RlWyRsZXZlbHNbJGxldisxXV0sICRsZXYrMSwgJG9yaWcsICRsZXZlbHMpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhcnJheSgnbmFtZScgPT4gJHBhcmVudCwgJ2NoaWxkcmVuJyA9PiAkY2hpbGRyZW4pOwogICAgIH0KCiAgICAgZnVuY3Rpb24gaGllcigkb3JpZywgJGxldmVscyl7CiAgICAgICAgICRzZWVuID0gYXJyYXkoKTsKICAgICAgICAgZm9yZWFjaCgkb3JpZyBhcyAkbm9kZSl7CiAgICAgICAgICAgICBpZighaW5fYXJyYXkoJG5vZGVbJGxldmVsc1swXV0sICRzZWVuKSl7CiAgICAgICAgICAgICAgICAgICRzZWVuW10gPSAkbm9kZVskbGV2ZWxzWzBdXTsKICAgICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gZ2V0X2NoaWxkcmVuKCRub2RlWyRsZXZlbHNbMF1dLCAwLCAkb3JpZywgJGxldmVscyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgfQoKICAgICBwcmludF9yKCRhcnJheSk7CiAgICAgcHJpbnRfcihoaWVyKCRhcnJheSwgJGxldmVscykpOwoKPz4=