if (!array_key_exists($quarter, $data)) { $data[$quarter] = ["quarter" => $row["quarter"] - 1, "year" => $row["year"], "days" => [], "dataByPlatform" => []]; } if (!array_key_exists($row["platform"], $data[$quarter]["dataByPlatform"])) { $data[$quarter]["dataByPlatform"][$row["platform"]] = []; } $data[$quarter]["dataByPlatform"][$row["platform"]][] = $row["value"]; $data[$quarter]["days"][substr($row["time"], 0, 10)] = true; } if ($format == 'csv') { $csvRowTemplate = ['year' => '', 'quarter' => '', 'partial' => '']; } foreach ($data as $quarter => &$set) { ksort($set["dataByPlatform"]); foreach ($set["dataByPlatform"] as $platform => &$report) { $report = \Scalr_Util_Arrays::percentile($report, 90, true); if ($format == 'csv' && !array_key_exists($platform, $csvRowTemplate)) { $csvRowTemplate[$platform] = 0; } } } foreach ($data as $quarter => &$set) { $uniqueDates = count($set["days"]); $partial = $quarterDays[$set["quarter"]] + ($set["quarter"] === 0 && ($set["year"] % 4 === 0 && $set["year"] % 100 !== 0 || $set["year"] % 400 === 0) ? 1 : 0) === $uniqueDates ? false : $uniqueDates; if ($format == 'csv') { $csvData[] = array_merge($csvRowTemplate, ['year' => $set["year"], 'quarter' => $set["quarter"] + 1, 'partial' => empty($partial) ? '' : $partial], $set["dataByPlatform"]); } else { foreach ($set["dataByPlatform"] as $platform => &$report) { $platformName = array_key_exists($platform, $allPlatforms) ? $allPlatforms[$platform] : $platform; if (empty($report)) { $report = str_pad($platformName . ":", 32) . "0";