我有一个返回值的递归函数。
public function getparent ($user)
{
$referrer=''; $pos=0;$this->setFieldNames();
$result=mysql_query("select * FROM ". $this->dbtablename ." WHERE ".$this->id_field . " = '$user'", $this->dbConnectionID);
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
$referrer=$row['referrer'];
$export=array();
foreach($this->tablefields as $val){
$export[$val] = $row[$val];
}
}
if($referrer != "0" && $referrer != "")
{
$result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->id_field . " ='$referrer'", $this->dbConnectionID);
while($row2=mysql_fetch_array($result2, MYSQL_ASSOC))
{
$export=array();
foreach($this->tablefields as $val){
$export[$val] = $row2[$val];
}
}
}
$result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->parent_id_field . " ='$referrer' order by id asc", $this->dbConnectionID);
while($row2=mysql_fetch_array($result2, MYSQL_ASSOC))
{
$usernames[]=$row2['username'];
}
$pos=array_search($user, $usernames);
if( $referrer == '0' || $pos >=1 )
{echo 'xxxxxxx';
return $export;
}
else
{
$this->getparent($referrer);
}
}似乎当$referrer为零时,它不会返回任何值,但它会回显'xxxxxxx‘。问题会是什么呢!?
发布于 2010-09-15 22:28:50
有一个问题:
while($row=mysql_fetch_array($result, MYSQL_ASSOC))
{
$referrer=$row['referrer'];
$export=array();
foreach($this->tablefields as $val){
$export[$val] = $row[$val];
}
}你会在每次迭代中替换你的导出数组--这是你的意图吗?除了最后一行之外,所有数据都将被丢弃。然后在这个块中再做一次:
if($referrer != "0" && $referrer != "")
{
$result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->id_field . " ='$referrer'", $this->dbConnectionID);
while($row2=mysql_fetch_array($result2, MYSQL_ASSOC))
{
$export=array();
foreach($this->tablefields as $val){
$export[$val] = $row2[$val];
}
}
}其中(a)仅获取最后一行数据,(b)覆盖第一个块中的数据(可能需要后者)。
最后,如果你遇到了这个代码块(referrer在你的代码中第一次不是零):
else
{
$this->getparent($referrer);
}你永远不要从递归调用中返回一个值,它应该是:
else
{
return $this->getparent($referrer);
}我怀疑这才是真正的问题。但我不得不质疑这种递归方法是否是最好的,而不是迭代方法。
发布于 2010-09-15 19:07:06
尝试在while循环之前声明$export
https://stackoverflow.com/questions/3716962
复制相似问题