我在图表控制器中有一些性能问题。我有两个数组:一个数组有日期,一个数组包含实体,实体也包含日期。我要累积计算实体的日期值。
我确实有一些代码,但速度很慢(数据数组中的68k行需要等待3-4秒)。
我的代码:
// Loop through the SQL results and count on date
foreach ($result as $row) {
foreach ($dates as $date => $value) {
// $row['appointmentDate'] is a DateTime object
if ($date >= $row['appointmentDate']->format('Ymd')) {
$dates[$date]++;
}
}
}是否有更聪明/更好/更快的方法来实现这一点?
//编辑
杰克给了我我所需要的动力,我解决了我的表演问题。
上面的代码花了38000毫秒完成,代码低于5700毫秒。
usort($result, function($a, $b) {
return $a['appointmentDate'] > $b['appointmentDate'];
});
// Loop through the SQL results and count on date
for ($i = 0; $i++; $i <= count($result)) {
$i++;
$dates[$result[$i]['appointmentDate']->format('Ymd')] = $i;
}谢谢你的帮助,杰克!
发布于 2014-03-24 13:11:05
是。在进行比较之前,通过对这两个数组进行排序,可以获得更好的性能。通过排序两个数组,您可以避免执行n*m循环,并保持n+m复杂性(加上n*log n和m*log m进行排序,这至少小于n*m)。
https://stackoverflow.com/questions/22610030
复制相似问题