返回后继续做

时间:2016-02-14 17:44:49

标签: php wordpress

我在这里使用WordPress。我有以下函数,它从函数外部调用,然后通过do while循环递归调用自身。我需要在这里使用do,因为当while条件为真时我需要一次迭代。

该函数最终满足if语句中的条件(在do...while内),但是即使我有一个return语句,它仍然会无休止地迭代最后一次迭代。

public function parent_category_has_fiance($cat_id) {

    global $wpdb;
    $terms = $wpdb->get_row("
                        SELECT
                            term_id, 
                            parent 
                        FROM
                            $wpdb->term_taxonomy
                        WHERE 
                            term_id = $cat_id
                            ");

    do {
        $parent_id = $terms->parent;
        $term_id = $terms->term_id;
        // test if a parent category has a rule
        $does_finance_exist = $this->has_finance($term_id);
        if($does_finance_exist == true) {
            echo "Found parent finance";
            return true;            
        }
        $this->parent_category_has_fiance($parent_id);
    } while ((int)$terms->parent > 0);
    return false;
}   

有人可以在这里提出这个问题吗?

1 个答案:

答案 0 :(得分:1)

我认为你必须添加这样的东西:

$parent_id = $terms->parent;
if( !$parent_id ) return False;

我不知道$ terms-> parent的类型,所以如果失败时返回值为≠False,则必须更改条件。

如果没有此修改,当当前$parent_id没有$cat_id时,也会执行递归调用。

否则,您可以查看$terms结果,如果为空,则返回False

编辑:

很难找到一个解决方案而不知道调用的sigle方法(也许添加标签可以帮助!),但也许这个简单的代码修改可以解决你的问题:

while( (int)$terms->parent > 0 )
{
    (...)
}