PHP循环覆盖数组

时间:2017-08-22 00:27:04

标签: php arrays loops

我有循环开始,我可以请一些帮助。

我必须遍历对API的一些curl调用,并获取记录然后推送到另一个API。来自此端点的每次调用仅返回30条记录,因此如果超过30条记录,我还需要循环访问。

我试图在所有循环结束时转出一个数组来查看我认为的所有数据,但它只输出1条记录。

我在这里丢失了一些愚蠢的东西吗?

$project_ids = array(
    '111111',
    '222222',
    );

$array = array();

foreach ($project_ids as $proj_id) {

    $go_again = true;
    $page = 1;
    $per_page = 30;

    while ( $go_again ) {

        $curl = curl_init($baseurl . $key_url);

        $keyPOSTdata = array(
            "date_format" => "d-m-Y",
            "page" => $page,
            "projects_id" => $proj_id,
        );

        curl_setopt($curl, CURLOPT_POST, false);
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($keyPOSTdata));
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

        $response = curl_exec($curl);

        $result = json_decode($response);
        $total =  $result->body->total_count;
        $new_total = $total - ($per_page * $page);

        if( $total - ($per_page * $page ) > 0 ) {
            ++$page;
        }
        else {
            $page = 1;
            $go_again = false;
        }

        curl_close($curl);

        foreach ($result->body as $item) {
            $array['attribute1'] = $item->attribute1;
            $array['attribute2'] = $item->attribute2;
            $array['attribute3'] = $item->attribute3;
        }

    }

}

echo '<pre>';
print_r($array);
echo '</pre>';
exit();

4 个答案:

答案 0 :(得分:3)

你确实在每个循环上重写数组。请注意,您没有为每条记录初始化新行,您只需在&#34;属性X&#34;上写字。田野一遍又一遍。这应该有效:

foreach ($result->body as $item) {
    $record = [];
    $record['attribute1'] = $item->attribute1;
    $record['attribute2'] = $item->attribute2;
    $record['attribute3'] = $item->attribute3;
    $array[] = $record;
}

答案 1 :(得分:0)

如果您想要每个项目ID的项目,那么您可能需要:

foreach ($result->body as $i => $item) {
    $record[$proj_id][$i]['attribute1'] = $item->attribute1;
    $record[$proj_id][$i]['attribute2'] = $item->attribute2;
    $record[$proj_id][$i]['attribute3'] = $item->attribute3;
}

答案 2 :(得分:0)

你在这里覆盖!

$array['attribute1'] = $item->attribute1;
$array['attribute2'] = $item->attribute2;
$array['attribute3'] = $item->attribute3;

每个循环都会覆盖这些值的值。

您可以通过两种方式解决此问题,

foreach ($result->body as $key => $item) {
    $record[$key]['attribute1'] = $item->attribute1;
    $record[$key]['attribute2'] = $item->attribute2;
    $record[$key]['attribute3'] = $item->attribute3;
}

OR

foreach ($result->body as $key => $item) {
    $record['attribute1'][] = $item->attribute1;
    $record['attribute2'][] = $item->attribute2;
    $record['attribute3'][] = $item->attribute3;
}

这取决于您的要求,您希望如何使用数组。

答案 3 :(得分:0)

public class productDetails
        {
            public string productHeader { get; set; }
            public string productImage { get; set; }
            public string productManufacturer { get; set; }
            public string productPrice { get; set; }
            public string productDescription { get; set; }
        }

试试这个,应该可以。