지도의 점을 포함하는 배열을 거쳐서 서로의 거리를 확인해야합니다. 얼마나 많은 노드가 각각 200m와 50m 안에 있는지 계산할 필요가 있습니다. 더 작은 양의 값에 대해서는 정상적으로 작동합니다. 그러나 그것을 통해 더 많은 값 (확장 성 테스트를 위해 약 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는 각 노드의 경도를 포함 포함 포함한다.
첫 번째 루프 안의 두 번째 for 루프에서 오류가 발생합니다. 이 루프는 선택된 맵 노드를 다른 노드와 비교하는 루프입니다. 나는 또한 Haversine 공식을 사용하고있다.
'count ($ data)', 'PI()/100' 등과 같은 불변 값을 루프 외부에서 계산하십시오. –