Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-递归函数,用于查找任何给定父问题的父问题_Php_Arrays_Recursion - Fatal编程技术网

PHP-递归函数,用于查找任何给定父问题的父问题

PHP-递归函数,用于查找任何给定父问题的父问题,php,arrays,recursion,Php,Arrays,Recursion,我希望有人能帮上忙,这让我快发疯了 我有一个简单的递归PHP函数,用于将所有的父对象获取到类别列表的任何给定父对象。您只需将任何给定类别的父类别ID传递给它,它就会递归地获取树上更远的所有父类别 function getParentCategoriesById($parent_category_id,array $parents = []){ if(empty($parent_category_id)) { return []; } $parents[] = $parent_cate

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

我有一个简单的递归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;}
假设category id=100有两个父级(33->37),如果我在返回之前转储$parents数组,结果是:

排列 ( [0] => 33 [1] => 37 ) 排列 ( [0] => 33 )


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

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


您没有对第二次调用的结果执行任何操作。数组本身没有被修改,你必须通过每个引用来实现。谢谢!谢谢,尽管由于我的PHP版本,我不得不支付函数定义中的引用:私有函数getParentCategoriesById($parent\u category\u id,array&$parents=[])也不需要返回这个数组。 Array ( [0] => 33 [1] => 37 ) Array ( [0] => 33 )
function getParentCategoriesById($parent_category_id, array &$parents = []) { ... }