【问题标题】:PHP function returning NULL instead of arrayPHP函数返回NULL而不是数组
【发布时间】:2015-08-01 02:03:53
【问题描述】:

我调用了一个函数,该函数执行一些递归并且应该返回一个数组。事实上,在被调用函数中的 return 语句之前的一个 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;
    }
}
?>

如果我在返回调用之前放置一个 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 才出现
  • 更改function getParentNodes($node, $results) 的值以将此$results 变量重命名为另一个名称,以免名称重叠。
  • 当您在函数内对getParentNodes() 进行递归调用时,您会丢弃返回的值,因此不会将任何内容传回链上。
  • @ArtisitcPhoenix,我运行的是 5.6.8 版。
  • @Martin,很好的观察。实际上,我在帖子之后更改了这些变量,但没有效果。

标签: php arrays


【解决方案1】:

您在递归情况下缺少return

      $results[] = $parent;
      return getParentNodes($parent,$results);   

【讨论】:

  • 哇,我觉得自己很傻。你是对的。我完全错过了另一个回电。它现在完美运行。非常感谢马克
  • 很高兴我能帮上忙。如果您能接受答案,那就太好了。 :)
【解决方案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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-15
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2017-09-03
    • 2013-11-17
    相关资源
    最近更新 更多