【问题标题】:Recursive function to get the parent caegory description递归函数获取父类描述
【发布时间】:2013-08-19 19:34:16
【问题描述】:

我创建了一个递归函数,我需要的是获取该产品的父类别描述和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
)

【问题讨论】:

  • 如果您删除 return 关键字,该函数将不会返回任何内容。您能否更清楚地了解您是否需要所有子类别 ID?因为你的 while 循环只会运行一次。当它到达return 时,您的整个功能将停止(返回)
  • 我认为我的函数编码错误。请查看我得到的对象,我已经更新了我的问题。

标签: php recursion woocommerce


【解决方案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)
}

return 和 assignment 的区别在于额外的 return。 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)
}

【讨论】:

  • 好的,如果我使用 $description 而不是 $desc,我的代码是正确的?
  • 另外,根据this,如果或while,哪个好。这两个代码现在都对我有用。 :)
  • if,因为它不应该在没有描述的情况下返回。此外,如果您迭代而不是递归,while 循环会很好。然后,您将在 while 循环中重复前两行而不是递归。
  • 另外,你能告诉我如何只发送特定的描述 term_id,当我创建一个数组时,它给了我:Array ( [0] => Array ( [0] => FDIC, 17th Street Northwest, Washington, DC [1] => 46 ) [1] => 48 ) 而且我不需要 " [1] => 48 "
  • 好的,我正在使用 if :) 但是你能告诉我这个数组的情况吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2021-01-07
  • 2011-11-26
  • 2015-01-22
  • 2011-01-24
相关资源
最近更新 更多