Рекурсивная функция возвращает неверное значение в php - PullRequest
0 голосов
/ 25 сентября 2019

Я написал рекурсивную функцию для поиска родителей ребенка, родительский массив получает правильные данные со всеми родителями, но когда я возвращаю данные, только первый родитель возвращает

Это моя рекурсивная функция

public function getSubChild($parent,$parents)
    {
        echo 'exceuted1<br>';
        array_push($parents,$parent);

        $sql         ="SELECT parent_id FROM vendor_services WHERE id='".$parent."'";
        $qry         =  $this->org_db->query($sql);
        $parents_data   =  $qry->row_array();
        echo '-------------parents_data : <br>';
        print_r($parents_data);
        echo '-------------<br>';

        echo '-------------parents : <br>';
        print_r($parents);
        echo '-------------<br>';

        if(count($parents_data)>0 && $parents_data['parent_id'] >0)
        {
            //echo 'got in '.$parents_data['parent_id'];
            $this->getSubChild($parents_data['parent_id'],$parents);

        }

        echo "came back to return <br>";
        return $parents;


    }

Это вывод, который я получаю

    exceuted1
        <br>-------------parents_data : 
        <br>Array
        (
            [parent_id] => 2
        )
        -------------
        <br>-------------parents : 
        <br>Array
        (
            [0] => 3
        )
        -------------
        <br>exceuted1
        <br>-------------parents_data : 
        <br>Array
        (
            [parent_id] => 1
        )
        -------------
        <br>-------------parents : 
        <br>Array
        (
            [0] => 3
            [1] => 2
        )
    -------------
    <br>exceuted1
    <br>-------------parents_data : 
    <br>Array
    (
        [parent_id] => 
    )
    -------------
    <br>-------------parents : 
    <br>Array
    (
        [0] => 3
        [1] => 2
        [2] => 1
    )
    -------------
    <br>came back to return 
    <br>came back to return 
    <br>came back to return 
    <br>final returnArray
    (
        [0] => 3
    )

Я хочу вернуть родительский массив, как этот

Array
  (
      [0] => 3
      [1] => 2
      [2] => 1
  )

1 Ответ

0 голосов
/ 25 сентября 2019

Вы не возвращаете рекурсивный вызов внутри функции.Так и должно быть.

public function getSubChild($parent,$parents)
    {
        echo 'exceuted1<br>';
        array_push($parents,$parent);

        $sql         ="SELECT parent_id FROM vendor_services WHERE id='".$parent."'";
        $qry         =  $this->org_db->query($sql);
        $parents_data   =  $qry->row_array();
        echo '-------------parents_data : <br>';
        print_r($parents_data);
        echo '-------------<br>';

        echo '-------------parents : <br>';
        print_r($parents);
        echo '-------------<br>';

        if(count($parents_data)>0 && $parents_data['parent_id'] >0)
        {
            //echo 'got in '.$parents_data['parent_id'];
            return $this->getSubChild($parents_data['parent_id'],$parents);

        }

        echo "came back to return <br>";
        return $parents;


    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...