【发布时间】:2016-05-25 06:18:06
【问题描述】:
我有一个 csv 文件,它有大约 500000 行。我需要做的是在第一个循环中获取前 100 行并操作这些行(例如,将前 100 个 ID 发送到 API 并保存响应)。在第二个循环中,跳过前 100 行(已经使用)并再使用 100 行并将请求发送到 Web 服务。同样,在第三个循环中,跳过前 200 行并获取另外 100 行并将请求发送到 Web 服务等等......
我可以用下面的代码把每一行都取一个。 (经过测试:效果很好)
if (($handle = fopen($filename, "r")) !== FALSE) {
$id = 1;
$line = fgetcsv($handle); //skip first row
//fetch data from each row
while (($data = fgetcsv($handle, ",")) !== FALSE) {
$hotel_id = $data[0];
//call service to request to web service
$hotelDetailRequest = (new \Services\Hotel\Hotel)->getHotelStaticData($hotel_id);
//do stuff to response
}
}
同样,我可以跳过一些初始行,就像我跳过第一行添加一样
$line = fgetcsv($handle);
$line = fgetcsv($handle);
$line = fgetcsv($handle);
但是,如上所述,这不是我的预期结果。我正在使用 PHP(Laravel)。我用谷歌搜索,但找不到任何符合我标准的合适人选。有没有人遇到同样的问题?
任何帮助将不胜感激。谢谢你
【问题讨论】:
-
为什么需要这样做?您是否关心发送请求的频率,还是与内存相关的性能问题?您能否详细说明为什么需要这样做,以便我们更好地了解潜在问题并提供解决方案。
-
是的,我关心发送请求的频率。所以,我在午夜之后和早上之前运行查询。我实际上正在将静态数据保存到我的数据库中,正如我正在做的 Web 服务中所记录的那样。