【问题标题】:PHP - Recursive function to find parents of any given parent - issuePHP - 查找任何给定父级的父级的递归函数 - 问题
【发布时间】:2017-09-06 10:36:21
【问题描述】:

希望有人能帮忙,这让我发疯了!

我有一个简单的递归 PHP 函数,用于获取所有父级到任何给定父级的类别列表。您只需将任何给定类别的父类别 ID 传递给它,它就会递归地让所有父类别更上一层楼。

function getParentCategoriesById($parent_category_id,array $parents = []){

if(empty($parent_category_id)) {
    return [];
}

$parents[] = $parent_category_id;

$parent_category = DB::builder()->table('product_categories')->find($parent_category_id);

if(!empty($parent_category->parent)) {
    getParentCategoriesById($parent_category->parent,$parents);
}

return $parents;}

假设类别 id=100 有 2 个父母 (33->37),如果我在返回之前转储 $parents 数组,结果是:

数组
(
    [0] => 33
    [1] => 37
)
数组
(
    [0] => 33
)

返回的第一个数组是正确的结果,但我不明白函数是如何重新运行的,然后只返回第一个父级。

【问题讨论】:

  • 您没有对第二次getParentCategoriesById 调用的结果做任何事情。并且数组本身没有被修改,你必须通过每个引用传递它才能发生。
  • 谢谢!成功了。

标签: php arrays recursion


【解决方案1】:

您应该在内部调用中将$parents 的引用传递给getParentCategoriesById()

function getParentCategoriesById($parent_category_id, array &$parents = []) { ... }

【讨论】:

  • 谢谢,虽然由于我的 PHP 版本,我不得不在函数定义中支付参考:private function getParentCategoriesById($parent_category_id,array &$parents = [])
  • 也不需要返回这个数组。
猜你喜欢
  • 1970-01-01
  • 2013-09-15
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2011-05-14
相关资源
最近更新 更多