我有循环开始,我可以请一些帮助。
我必须遍历对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();
答案 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; }
}
试试这个,应该可以。