function get_species($specie_id, $db = null) { if ($specie_id === '0') { return array(); } if ($db === null) { $db = dbConnect(); } $query = "SELECT * FROM species_records WHERE rank_id = $specie_id"; $result = $db->Execute($query); $row = $result->FetchRow(); return array_merge($row, array('parent' => get_species($row['parent_tsn'], $db); }
这会很好地进行递归,没有测试过array_merge是否会显示你想要的结果,但这实际上会给你一个关联数组,每个动物都有他的父母,直到它到达它的父母的动物园是一个空数组。
我还处理了内部的数据库连接,因此您不会重新创建每个级别的连接。
这有点是一个多余的递归,我建议你为每个动物插入一个缓存表来创建它的父母,这样每当你想要检查一个动物的前辈时你就可以做一个 SELECT 而不是递归。
SELECT
即
TABLE species_records_familiy_tree tsn_id | parents 123 | 0,2,36,77,463,349