PHP中的递归函数 - 如何不返回false?

时间:2011-10-24 20:33:32

标签: php wordpress

之前我从未在PHP中使用过递归,所以我对此非常新手 - 我有以下问题。 WordPress函数应返回给定子项id的顶级term id - 术语可以有1..n父项,因此递归函数似乎在这里很有用。

// recursive function
function return_top_level_term($term_id,$taxonomy_name) {
    $term = get_term_by('id',$term_id,$taxonomy_name);
    if($term->parent>0) {
        return_top_level_term($term->parent,$taxonomy_name);
    } else {
            // here we get the correct value
        return $term->term_id;
    }
}

PHP确实找到了正确的term_id,但该函数总是返回false。

$my_top_level_term = return_top_level_function(423,$tax);

三层示例,非正式表示法:

return_top_level_term(return_top_level_term(return_top_level_term(return 1;)return false;) return false;)

我正在搜索1,但返回总是false,尽管该函数没有返回值。

当然我可以在函数上面写一个局部变量,由于范围规则可以保存值,但我想把它写入一个库 - 有没有办法通过调用递归函数来返回这个值? / p>

3 个答案:

答案 0 :(得分:6)

更改此行

        return_top_level_term($term->parent,$taxonomy_name);

return return_top_level_term($term->parent,$taxonomy_name);

否则最后的结果将不会返回到堆栈的顶部函数,并且返回将为无效

答案 1 :(得分:0)

// recursive function
function return_top_level_term($term_id,$taxonomy_name) {
    $term = get_term_by('id',$term_id,$taxonomy_name);
    if($term->parent>0) {
        return return_top_level_term($term->parent,$taxonomy_name);
    } else {
        return $term->term_id;
    }
}

也许你错过了回复陈述?

这也可以写成:

// recursive function
function return_top_level_term($term_id,$taxonomy_name) {

    $term = get_term_by('id',$term_id,$taxonomy_name);

    if($term->parent>0) {
        return return_top_level_term($term->parent,$taxonomy_name);
    }

    return $term->term_id;
}

答案 2 :(得分:0)

您没有在递归函数调用上返回值。

你应该return return_top_level_term($term->parent,$taxonomy_name);(注意额外的回报)

相关问题