在foreach中使用do while循环

时间:2018-08-16 19:34:53

标签: php

我正在foreach循环中对soccer api进行此调用,以返回每次比赛的比赛。 如果此调用在foreach循环之外,则效果很好。 在foreach中,我仅获得第一个竞赛数组,但未重置该数组!它一直为第一个循环返回相同的结果,我试图取消设置变量,但这似乎不起作用。有什么主意吗?

foreach($comps as $comp){
    $comp_api = $comp->comp_id;
    $from_date = new datetime($start_date);
    $to_date = new datetime($end_date);
    $matches_setup = ['query' => ['leagues' => $comp_id]];

    #loop matches
    $matches = array();
    do {
        $matches = array_merge($matches, $api->fixtures()->between()->period($from_date, $to_date, null, $matches_setup));
    } while ($monk_framework->fixtures()->nextPage($matches_setup));
    $results = $matches;

    /*
    * part where data is inserted to db
    */
}

该怎么办?还是这可能是api的问题?

2 个答案:

答案 0 :(得分:1)

您似乎正在每个循环上重置结果。

您应该在每次迭代后附加结果:

$results = [];

foreach($comps as $comp){

    $from_date = new datetime($start_date);
    $to_date = new datetime($end_date);
    $matches_setup = [
        'query' => [
            'leagues' => $comp_id
        ]
    ];

    #loop matches
    $matches = array();
    while ($api->fixtures()->nextPage($matches_setup)) {
        $matches = array_merge($matches, $api->fixtures()->between()->period($from_date, $to_date, null, $matches_setup));
    }
    $results = array_merge($results, $matches);
}

答案 1 :(得分:0)

我找到了解决方案,并找出了问题所在。

while ($monk_framework->fixtures()->nextPage($matches_setup));

此部分的nextPage参数在每次循环后都不会重置,这是我正在使用的api中的miss配置。在每个循环之后重置参数有助于解决我的问题。

#reset params for next call
self::$param = array();

对于可能在同一framework of sportmonks上偶然发现此问题的任何人,此处为full details