0

我创建了一个递归函数,我需要的是获取该产品的父类别描述和 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页面中的父类别。所以我调用函数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
)
4

1 回答 1

1

由于您的 while 循环不会改变$descriptionbut ,因此如果它不是基本情况并且您创建了一个无限循环$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)
}
于 2013-08-19T20:43:19.223 回答