【发布时间】:2013-07-31 03:23:06
【问题描述】:
我在 mysql 中有一个 150 行的数据集。我有一组 2 个循环,它们根据一些用户输入和数据集运行数学计算。该代码对 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 每次都寻找新数据。
有没有办法更好地构建它?对于运行这些并发周期,我有点迷失了。
【问题讨论】:
-
答案取决于您在遗漏的代码中所做的事情。如果你能更好地描述你实际在做什么,你会得到更好的帮助。
-
我只是在使用用户输入 ($_POST) 和数据集进行基本数学运算。