0

私は奇妙な問題を抱えています.Facebookからより多くの結果を得るために再帰関数を書きました. 呼び出された関数(再帰)で、値をメイン関数に返しています。呼び出された関数で、戻り値を出力すると、正確な値が表示されます(通常、配列サイズは90です)。しかし、メイン関数で戻り値を出力すると、常に小さくなります(配列サイズは毎回正確に50です)。これが私のコードです..

public function mainFunction(){
    $response = $fb->get('/me?fields=id,name,accounts', $useraccesstoken);    
    $userData = $response->getDecodedBody();
    $pages = $userData['accounts'];
    $pages = $this->getMorePages($pages);
}

public function getMorePages($pages){
    if(count($pages)>1 && isset($pages['paging']['next'])){
        $morePages = file_get_contents($pages['paging']['next']);
        $morePages = json_decode($morePages,true);
        foreach($morePages['data'] as $page){
            array_push($pages['data'],$page);
        }
        if(count($morePages)>1 && isset($morePages['paging']['next'])) {
            $pages['paging']['next']=$morePages['paging']['next'];
            $this->getMorePages($pages);
        }
        return $pages;
    }else{
        return $pages;
    }
}

私のコードの問題は何ですか..?

4

1 に答える 1

1

再帰関数を使用していますが、内部呼び出しによって返される値を使用していません...

固定コードは次のとおりです。

public function getMorePages($pages){
    if(count($pages)>1 && isset($pages['paging']['next'])){
        $morePages = file_get_contents($pages['paging']['next']);
        $morePages = json_decode($morePages,true);
        foreach($morePages['data'] as $page){
            array_push($pages['data'],$page);
        }
        if(count($morePages)>1 && isset($morePages['paging']['next'])) {
            $pages['paging']['next']=$morePages['paging']['next'];

            // Add return values to the main array
            //$pages += $this->getMorePages($pages);
            // For more support use array_merge function
            $pages = array_merge( $this->getMorePages($pages), $pages )
        }
        return $pages;
    }else{
        return $pages;
    }
}
于 2017-09-05T05:16:13.040 に答える