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