我在 mysql 中有一个 150 行的数据集。我有一组 2 个 for 循环,它们根据一些用户输入和数据集运行数学计算。该代码对 30 个行窗口进行计算,并将每个 30 行窗口的结果累加到一个数组中。我的意思是,我对第 0-29 行、然后是 1-30、然后是 2-31 等进行“循环”计算......这将导致 120 个“循环”。
现在 for 循环是这样设置的(有更多字段,为了简单起见,我只是修剪了代码。
$period=30;
$query = "SELECT * FROM table";
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)){
$data[] = array("Date" => $row['Date'], "ID" => $row['ID']);
}
for($i=0;$i<(count($data)-$window);$i++){
for($j=0;$j<$window;$j++){
//do calculations here with $data[]
$results[$i][$j]= calculations;
}
}
这适用于我拥有的行数。但是,我将脚本打开到具有不同窗口(360 行)的更大数据集(1700 行)。这意味着迭代次数呈指数增长。它给了我一个内存不足的错误。快速使用 memory_get_peak_usage() 表明内存会不断增加。
我开始认为让循环搜索该数据数组非常费力,尤其是当“窗口”与许多“循环”重叠时。示例:循环 0 遍历第 0-29 行。循环 1 遍历第 1-30 行。因此,这两个周期都共享他们需要的一行数据,但我告诉 PHP 每次都查找新数据。
有没有办法更好地构建这个?关于运行这些并发周期,我有点迷失了。