函数打印一个数组,但在调用php时返回null

时间:2017-07-25 06:05:54

标签: php laravel

我有以下功能,可以帮助我获取类别名称。

public function getParent($categoryId, $keepData) {
    $parentCategory = Category::select('category_id', 'parent_id', 'title')
                               ->where('category_id', $categoryId)->first();

    if($parentCategory->parent_id > 0) {
        $parent = Category::select('category_id','parent_id','title')
                           ->where('category_id',$parentCategory->parent_id)
                           ->first();
        $keepData[$parent->category_id] = $parent->title;
        $this->getParent($parent->category_id, $keepData);
    } else {
        //print_r($keepData);
        return $keepData;
    }
}

当我在函数内部print_r时,它会打印一个数组。

 array:2 [▼
     3 => "Stock Boxes"
     1 => "Boxes"
 ]

但是从其他函数调用此函数,

$keepData = array();
$breadcrumb = $this->getParent($categoryId, $keepData);
print_r($breadcrumb);

然后返回null

我缺少的是什么步骤。任何帮助都会很棒。

1 个答案:

答案 0 :(得分:0)

显然是这种情况

if ($parentCategory->parent_id > 0) {
    // ...
} 

评估为true,并且在此块中您没有返回任何内容,这就是方法调用有效返回null的原因。

将方法调整为

public function getParent($categoryId, array $keepData = [])
{
    $parentCategory = Category::select('category_id', 'parent_id', 'title')->where('category_id', $categoryId)->first();

    if ($parentCategory->parent_id > 0) {
        $parent = Category::select('category_id','parent_id','title')->where('category_id',$parentCategory->parent_id)->first();
        $keepData[$parent->category_id] = $parent->title;

        return $this->getParent(
            $parent->category_id, 
            $keepData
        );
    } 

    return $keepData;
}

并像这样调用(注意$keepData如何变成可选参数并默认为空数组):

$breadcrumb = $this->getParent($categoryId);