我在这里使用WordPress。我有以下函数,它是从函数外部调用的,然后通过 do while 循环递归调用自己。我需要在这里使用 do while 因为当 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;
}
谁能在这里提出这个问题?
我认为
您必须添加这样的东西:
$parent_id = $terms->parent;
if( !$parent_id ) return False;
我不知道$terms->父级的类型,因此如果返回的值在失败时≠ False,则必须更改条件。
如果没有此修改,您的递归调用也会在当前$cat_id
没有$parent_id
时执行。
否则,您可以检查结果$terms
如果为空,则返回False
。
编辑:
如果没有调用的 sigle 方法,很难找到解决方案(也许添加 wordpress 标签会有所帮助!(,但也许这个简单的代码修改可以解决您的问题:
while( (int)$terms->parent > 0 )
{
(...)
}