递归函数

时间:2009-12-12 09:34:10

标签: php function mysql

您好我有下表数据

   id  parent_id  name
    1             Machine
    2    3        Ram
    3    4        Cpu
    4             Computer
    5     6        food1
    6              food2

我需要选择可能的父母

    for example 
    1) if we select 'machine' all others can parents
    2) if we select 'cpu' then 'ram' and 'cpu' should not be there
    3) if we take 'food2' then 'food2', 'food1' should not be there all other have possibility .

我如何在类中编写(php,mysql递归)函数。 注意: - 仅使用单一功能  请帮助我 提前致谢 。

1 个答案:

答案 0 :(得分:2)

我有同样的问题

班级考试{

public static $roleIds;

public function availableParents()     {         self :: $ roleIds = null;

    $discardRoleIds = implode(',',$this->unAvailableRoles());

    $parentRoles = Acl_Model_Role::fetchAll("id NOT IN ({$discardRoleIds}) AND isactive = true" );

    return $parentRoles;        
}

/**
 * Getting  not available role id
 * 
 * @author Linto
 * @since 2009-11-25
 * @return Array 
 */
public function unAvailableRoles()
{
    $where = "parent_id = {$this->getId()}"; 

    self::$roleIds[] = $this->getId();       

    $count = Acl_Model_Role::count($where);

    if($count != 0) {
        foreach(Acl_Model_Role::fetchAll($where) as $role){                   
            $role ->unAvailableRoles();                
        }         
    }
    return  self::$roleIds; 

}

}

如果我们使用一次

,它将正常工作

如果情况是这样的话 $ role //创建了id为1的对象

$角色的> availableParents()

$ role //创建了ID为2的对象 $角色的> availableParents()

$ role //创建了ID为3的对象 $角色的> availableParents()

我们无法得到正确的答案(第一行也将改变第二个模型。)