无法弄清楚为什么这个函数返回NULL

时间:2014-02-11 17:37:58

标签: php recursion

编辑:对不起,我没有说清楚。将“Echo”替换为“hi”前面的“return”,它将返回null。我只是表明我可以进入那个条件。

这个PHP函数应该计算从数据库传递到数组的值的总和。该函数需要能够接受多个值(数组)值,并返回其求和值的数组。

下面:$ val是列名,$ result是查询返回的数据。因此,数据需要与正确的密钥匹配($ val帮助)。正如您所看到的,我尝试添加一些检查以确保函数在正确的时间返回。回显变量表明我到达了那个点,(“hi”被回显)但它总是返回NULL。如果不够清楚,请随时提问。

function getSum($val,$result,$i=1,$count)
{
    $sum = array();

    if(is_array($val) == true)
    {
        foreach($val as $henh)
        {
            //echo $i;
            $this->getSum($henh,$result,$i,$count);
            $i++;
        }
    }
    else
    {

        $strs = explode('.',$val);
        $str = $this->getParameters(array($strs[1]));
        //var_dump($str[$strs[1]]); exit;
        if($str[$strs[1]]['Parameter']['type']=='int' || $str[$strs[1]]['Parameter']['type']=='float')
        {
            //echo $i;
            $c = true;
            foreach($result as $item)
            {

                foreach($item as $k=>$v)
                {

                    if($k==$val AND $v !== null)
                    {
                        $c = true;
                        $sum[$val][] =  intval($v);
                    }
                }
            }
            if($i==$count AND isset($sum[$val]) !== 0)
            {

                echo "hi!";

            }   
        }   

    }

3 个答案:

答案 0 :(得分:2)

函数中没有return语句,因此它不会返回任何内容。

答案 1 :(得分:0)

因为你没有归还任何东西。您的函数中没有任何返回语句: http://www.php.net/manual/en/function.return.php

答案 2 :(得分:0)

如果你阅读了关于PHP文档的说明,如果没有指定返回值,你的函数将返回NULL

  

注意:如果省略返回值,则返回NULL值。

所以,一个函数,实际上会回归。但它会返回NULL

http://www.php.net/manual/en/functions.returning-values.php

除此之外,if

的语法错误
if($i==$count AND isset($sum[$val]) !== 0)

在PHP中,!==(三重不等式)运算符不会使用类型强制,因此您要比较返回isset()类型的bool的返回值到0 。此外,AND在PHP中很奇怪。它的优先级低于&&can lead to some weird output,如果您正在进行变量赋值,那么我建议使用&&,除非您打算使用较低的优先级。

您的if应该类似于:

if($i == $count && isset($sum[$val]) && $sum[$val] !== 0)

最后,你是以递归方式调用函数,但是你不是以递归方式返回值。

此:

 $this->getSum($henh,$result,$i,$count);

应该是这样的:

 return $this->getSum($henh,$result,$i,$count);