Php 递归函数不返回任何内容

Php 递归函数不返回任何内容,php,mysql,recursion,Php,Mysql,Recursion,我有一个数据库的自动零件号,需要更新旧的零件号和价格。每一行都有一个零件号(字段名“master”)、一个价格和一个带有替代(较新)零件号(字段名“pnc”)的字段。脚本需要检查“pnc”字段是否为空。如果不是的话,它应该去抢那个号码的价格。很简单 但是,某些零件号在达到最新零件号和价格之前,需要经过未知级别的编号。因此,我认为递归函数是最好的解决方案。但是,它不能正常工作。代码如下: public function updatePricing() { //met

我有一个数据库的自动零件号,需要更新旧的零件号和价格。每一行都有一个零件号(字段名“master”)、一个价格和一个带有替代(较新)零件号(字段名“pnc”)的字段。脚本需要检查“pnc”字段是否为空。如果不是的话,它应该去抢那个号码的价格。很简单

但是,某些零件号在达到最新零件号和价格之前,需要经过未知级别的编号。因此,我认为递归函数是最好的解决方案。但是,它不能正常工作。代码如下:

    public function updatePricing()
    {
        //method to update pricing by referencing supersession prices
        $sql = "SELECT * FROM prices";
        $result = mysql_query($sql);
        $num_rows = mysql_num_rows($result);

        for($i=0;$i<2000;$i++) //using 2000 for testing, use $num_rows after
            {
                $row = mysql_fetch_array($result);
                $id = $row['id'];
                $super_num = $row['pnc'];

                //if there is a supersession in this row find original
                if(!empty($super_num))
                    {
                        $final_super_price = $this->findSuperPrice($super_num);

                        echo "partnum: " . $row['master'];
                        echo "&nbsp;&nbsp;";
                        echo "price: " . $final_super_price . "<br /><br />";
                    }
            }
    }

public function findSuperPrice($part_num)
    {
        $sql = "SELECT * FROM prices WHERE master='" . $part_num . "'";
        $result = mysql_query($sql);
        $row = mysql_fetch_array($result);

        if (empty($row['pnc'])) //if there aren't any supersession numbers
            {
                $final_price = $row['list'];
                return $final_price;
            }
        else //recursively call itself until we find the last number
            {
                $this->findSuperPrice($row['pnc']);
            }
    }
公共函数更新定价()
{
//通过引用替代价格更新定价的方法
$sql=“从价格中选择*”;
$result=mysql\u查询($sql);
$num\u rows=mysql\u num\u rows($result);
对于($i=0;$ifindSuperPrice($super_num);
echo“partnum:.$row['master'];
回声“;
回声“价格:.”最终超级价格“

”; } } } 公共函数findSuperPrice($part_num) { $sql=“从价格中选择*,其中master=”“$part_num。””; $result=mysql\u查询($sql); $row=mysql\u fetch\u数组($result); if(空($row['pnc'])//如果没有任何替换编号 { $final_price=$row['list']; 返回$final_价格; } else//递归调用自身,直到找到最后一个号码 { $this->findSuperPrice($row['pnc']); } }
发生的事情是updatePricing()函数一直运行,直到它找到一个在“pnc”字段中有条目的行。当它找到一个条目时,会调用findSuperPrice()函数。findSuperPrice()函数应该递归运行,直到“pnc”字段为空。发生这种情况时,会返回一个数字

但是,如果它实际到达findSuperPrice()中if语句的else部分,它不会返回任何内容。基本上,如果它的深度超过一级。我没有收到任何错误,它只是返回一个空白语句。我已经验证了那里有信息,它也应该返回。谢谢


另外,我应该提到这是在一个较大的类中。该类的其余部分与这两个方法无关。

您当前没有得到返回值,因为如果
$row['pnc']
不为空,则会忽略
findSuperPrice
的结果。正确返回递归调用的值:

return $this->findSuperPrice($row['pnc']);

您需要返回一个值。更改此代码:

else //recursively call itself until we find the last number
    {
      $this->findSuperPrice($row['pnc']);
    }
为此:

else //recursively call itself until we find the last number
    {
      return $this->findSuperPrice($row['pnc']);
    }

您在
findSuperPrice
内的
else
案例中缺少返回语句

但是…看起来你正在抽取大量数据来查看/操作单个字段。你也可以在mysql中编写函数,类似于我在这里发布的函数:


这可以使您直接从数据库中查询所需的值。如果您有表的结构,我很乐意提供帮助。

考虑使用
do{}while()
循环。虽然您的DB结构是递归的,但不需要使用实际的递归调用来逐步升级树。