之前我从未在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>
答案 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);
(注意额外的回报)