Функция PHP не возвращает значение - PullRequest
0 голосов
/ 15 сентября 2010

У меня есть рекурсивная функция, которая возвращает значение.

    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'.В чем может быть проблема !?

Ответы [ 2 ]

2 голосов
/ 15 сентября 2010

Есть проблема с:

    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];
            }
        }
    }

Если вы (а) получаете только последний ряд данных и (б) перезаписываете данные из первого блока (возможно, этот последний необходим).

И, наконец, если вы когда-нибудь попадете в этот блок (реферер не равен нулю в первый раз через ваш код):

    else
    {
        $this->getparent($referrer);
    }

Вы никогда не возвращаете значение из рекурсивного вызова, оно должно быть:

    else
    {
        return $this->getparent($referrer);
    }

То, что я подозреваю, является актуальной проблемой. Но я должен усомниться в том, что этот рекурсивный подход лучше, чем итеративный.

0 голосов
/ 15 сентября 2010

Попробуйте объявить $ export перед циклом while

...