私はループインセプションを行っており、何か助けてください。PHPループが配列を上書きしています
私はいくつかのカールコールをAPIにループし、レコードを取得して別の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();
ああ、書き直しがなぜ起こっていたのかわかりました。しかし、このメソッドに変更すると、出力に変化はありません。まだ1つのアイテムしかダンプされていません... – thatryan
私はあなたが応答の各要素を1つの要素の本体に渡って繰り返すわけではないと思います。 whileループの中に2つの 'foreach'が必要になるでしょう。あなたの質問にサンプルの回答を編集していただけますか? – ishegg
私は、新しい$レコードのtemp配列と$ array []割り当てをforeachループの内側に移動することで、動作しています。 – thatryan