PHP函数返回NULL而不是数组

3

我调用了一个递归函数,应该返回一个数组。实际上,在被调用的函数中,在返回语句之前立即进行var_dump会显示数组;然而,在调用函数返回的结果中执行var_dump时,显示为NULL,而不是数组。

以下是调用函数的代码。

<?php  

// configuration
require_once("../includes/config.php");
require_once("../includes/getParentNodes.php");  

$bottomNode = 17389;
$chain = [];
$chain[] = $bottomNode;
$results = getParentNodes($bottomNode,$chain);

var_dump($results); ?>

这是所调用的函数。

<?php

function getParentNodes($node, $results)
{
    $select = query("SELECT parent_id FROM classifications WHERE node_id = ?", $node);
    $parent = implode("",$select[0]);
    if (!empty($parent))
    {
        $results[] = $parent;
        getParentNodes($parent,$results);   
    }
    else
    {
        return $results;
    }
}
?>

如果我在return调用之前立即放置var_dump,我会得到以下结果。
Array
(
    [0] => 17389
    [1] => 17386
    [2] => 17334
    [3] => 16788
    [4] => 15157
    [5] => 10648
    [6] => 3962
    [7] => 665
    [8] => 39
    [9] => 1
)

然而,在调用函数中的var_dump输出为NULL。

我已经阅读了手册和相关帖子,但没有一个能够解决这个问题。任何帮助都将不胜感激。


你使用的是哪个版本的PHP?希望是大于5.3的,因为这可能是你遇到问题的原因。原因在于,短数组语法直到PHP 5.4才出现。 - ArtisticPhoenix
将您的 function getParentNodes($node, $results) 函数中的 $results 变量重命名为其他名称,以避免名称冲突。 - Martin
当您从函数内部对getParentNodes()进行递归调用时,丢弃了返回的值,因此没有传回链。 - user1864610
@ArtisitcPhoenix,我正在运行版本5.6.8。 - John
@Martin,观察得很好。实际上,我在发布后更改了这些变量,但没有产生任何效果。 - John
2个回答

4
在递归部分您忘了添加 return 语句。
      $results[] = $parent;
      return getParentNodes($parent,$results);   

哇,我感觉很傻。你是正确的。我完全错过了另一个返回调用。现在它完美地工作了。非常感谢Mark。 - John
很高兴能够帮到您。如果您能接受答案,那就太好了。 :) - Mark Reed

2

代码上有一个小错误:

function getParentNodes($node, $results)
{
    $select = query("SELECT parent_id FROM classifications WHERE node_id = ?", $node);
    $parent = implode("",$select[0]);
    if (!empty($parent))
    {
        $results[] = $parent;
        return getParentNodes($parent,$results); // <- modified
    }
    else
    {
        return $results;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接