我需要通過包含地圖中的點的數組並檢查它們之間的距離。我需要計算每個節點在200米和50米範圍內有多少個節點。它適用於較小的數值。但是,當我試圖通過它運行更多的值(大約4000用於可伸縮性測試)時發生錯誤,說我已經達到了300秒的最大執行時間。如果可能,它需要能夠在300秒內處理至少這麼多。PHP代碼達到執行時間限制
我已經閱讀並發現有一種方法來禁用/更改此限制,但我想知道是否有更簡單的方式執行下面的代碼,以便運行它的時間會減少。
for($i=0;$i<=count($data)-1;$i++)
{
$amount200a=0;
$amount200p=0;
$amount50a=0;
$amount50p=0;
$distance;
for($_i=0;$_i<=count($data)-1;$_i++)
{
$distance=0;
if($data[$i][0]===$data[$_i][0])
{
}
else
{
//echo "Comparing ".$data[$i][0]." and ".$data[$_i][0]." ";
$lat_a = $data[$i][1] * PI()/180;
$lat_b = $data[$_i][1] * PI()/180;
$long_a = $data[$i][2] * PI()/180;
$long_b = $data[$_i][2] * PI()/180;
$distance =
acos(
sin($lat_a) * sin($lat_b) +
cos($lat_a) * cos($lat_b) * cos($long_b - $long_a)
) * 6371;
$distance*=1000;
if ($distance<=50)
{
$amount50a++;
$amount200a++;
}
else if ($distance<=200)
{
$amount200a++;
}
}
}
$amount200p=100*number_format($amount200a/count($data),2,'.','');
$amount50p=100*number_format($amount50a/count($data),2,'.','');
/*
$dist[$i][0]=$data[$i][0];
$dist[$i][1]=$amount200a;
$dist[$i][2]=$amount200p;
$dist[$i][3]=$amount50a;
$dist[$i][4]=$amount50p;
//*/
$dist.=$data[$i][0]."&&".$amount200a."&&".$amount200p."&&".$amount50a."&&".$amount50p."%%";
}
索引0包含的每個節點的唯一ID,1包含每個節點的緯度和 索引2包含各節點的經度。
錯誤發生在第一個循環內部的第二個循環中。該循環是將所選映射節點與其他節點進行比較的循環。我也使用Haversine公式。
計算循環外的不變量:'count($ data)','PI()/ 100'等等 – 2013-03-24 03:12:01