У меня есть набор данных в mysql с 150 строками. У меня есть набор из 2 для циклов, которые выполняют математические вычисления на основе некоторых пользовательских входов и набора данных. Код выполняет вычисления для 30-строчных окон и накапливает результаты для каждого 30-строчного окна в массиве. Я имею в виду, что я делаю «цикл» вычислений в строках 0-29, затем 1-30, затем 2-31 и т. Д. Это приведет к 120 «циклам».Как перебирать «окно» данных в наборе данных?
Сейчас цикл устанавливается как так (есть несколько полей, я просто обрезается код для простоты этот вопрос.
$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;
}
}
Это хорошо работает для числа строк, у меня есть, однако. , Я открыл сценарий для большего набора данных (1700 строк) с другим окном (360 строк) .Это означает, что экспоненциально больше итераций. Это дало мне ошибку в памяти. Некоторое быстрое использование memory_get_peak_usage() показало, что память будет постоянно увеличиваться.
Я начинаю думать, что поиск петли через этот массив данных чрезвычайно трудоемкий ous, особенно когда «окно» перекрывается во многих «циклах». Пример: цикл 0 проходит через строки 0-29. Цикл 1 проходит через строки 1-30. Таким образом, оба этих цикла имеют ряд данных, которые им нужны, но я говорю PHP, чтобы каждый раз искать новые данные.
Есть ли способ структурировать это лучше? Я получаю отчасти заблуждение о том, как управлять этими параллельными циклами.
Ответ зависит от того, что вы делаете в фрагменте кода, который вы оставили. Если вам лучше описать то, что вы на самом деле делаете, вы получите лучшую помощь. – RiggsFolly
Я просто делаю базовую математику с пользовательскими вводами ($ _POST) и набором данных. –