用于获取父类别描述的递归函数

时间:2013-08-19 19:34:17

标签: php recursion woocommerce

我创建了一个递归函数,我需要的是获取该产品的父类别描述和term_id。

function desc_pro($parent) {
    $term = get_term_by('parent', $parent, 'product_cat');
    $description = $term->description;

    while($description == null) {
        $desc = desc_pro($term->parent);
        return $desc;
    }
    return $description;
}

现在,当我运行此代码时,我得到了正确的描述。 但如果我删除任何返回,那么它将无法正常工作。它显示为空白。 (这没关系?我认为代码错了?)

第二:我需要term_id,当我创建数组时,它也会发送所有子类别id。哪个错了。我只需要那个有描述的id。

我认为代码错了?还是有其他问题?

这是我的数组:(我发送的是我的php页面中的父类别。所以我打电话 function get_desc(48);)

它给我第一个对象,现在我必须测试是否可用描述? 如果是,则停止并返回描述,并且它是term_id。 如果它不可用,则获取父ID并再次检查。所以这一直持续到找到描述为止。

stdClass Object
(
    [term_id] => 48
    [name] => Cereal
    [slug] => cereal
    [term_group] => 0
    [term_taxonomy_id] => 49
    [taxonomy] => product_cat
    [description] => 
    [parent] => 46
    [count] => 0
)

stdClass Object
(
    [term_id] => 46
    [name] => Grocery Store A
    [slug] => grocery-store-a
    [term_group] => 0
    [term_taxonomy_id] => 47
    [taxonomy] => product_cat
    [description] => FDIC, 17th Street Northwest, Washington, DC
    [parent] => 45
    [count] => 0
)

1 个答案:

答案 0 :(得分:1)

由于您的while循环不会更改$description$desc,如果它不是基本情况并且您创建了无限循环,则它始终为null

试试这个:

function desc_pro($parent) {
    $term = get_term_by('parent', $parent, 'product_cat');
    $description = $term->description;

    if( $description == null)
        return desc_pro($term->parent); // recurse if not set
        //$description = desc_pro($term->parent); // an alternative to the above

    return $description; // base case (when set)
}

退货和转让之间的差异是额外的回报。 PHP不进行尾调用优化,所以它并没有那么不同,只是没有注释的那个看起来更适合函数式程序员。

对于迭代方法,while循环会很好:

function desc_pro($parent) {
    $description = null;

    while( $description == null) {
        $term = get_term_by('parent', $parent, 'product_cat');
        $description = $term->description;
    }

    return $description; // base case (when set)
}