>  기사  >  php教程  >  for, while, foreach의 성능 비교

for, while, foreach의 성능 비교

黄舟
黄舟원래의
2016-12-14 11:13:451306검색

일반적으로 배열을 순회하는 방법에는 for, while, foreach 세 가지가 있습니다. 그 중 가장 간단하고 편리한 것은 foreach입니다. 그렇다면 이들 간의 작동 및 성능 차이는 무엇입니까? 일반적으로 어떤 방법을 사용하는 것이 더 낫습니까?

먼저 첨자가 50,000개인 1차원 배열을 순회하는 데 걸리는 시간을 테스트해 보겠습니다.

테스트 플랫폼:
CPU: P-M 725
메모리: 512M
하드 디스크: 40G 5400rpm
OS: Windows XP SP2
WEB: apache 2.0.54 php5.0.4

테스트 코드:

$arr = array();
for($i = 0; $i < 50000; $i ){
$arr[] = $i*rand(1000,9999);
}

function GetRunTime()
{
list($usec,$sec)=explode(" ",microtime());
return ((float)$usec (float)$ sec);
}
################################
$time_start = GetRunTime();

for($i = 0; $i < count($arr); $i ){
$str .= $arr[$i];
}

$time_end = GetRunTime();
$time_used = $time_end - $time_start;

echo '사용 시간:'.round($time_used, 7) .'(s )

';
설정 해제($str, $time_start, $time_end, $time_used);
############# #### ##################
$time_start = GetRunTime();

while(list($key, $val) = 각각($arr) )){
$str .= $val;
}

$time_end = GetRunTime();
$time_used = $time_end - $time_start;

echo ' 사용된 시간:'.round($time_used, 7).'(s)

';
unset($str, $key, $val, $time_start , $time_end, $ time_used);
################################
$time_start = GetRunTime ();

foreach($arr as $key => $val){
$str .= $val;
}

$ time_end = GetRunTime();
$time_used = $time_end - $time_start;
echo 'foreach 사용 시간:'.round($time_used, 7).'(s)

###############################

? >테스트 결과:

세 가지 테스트 결과의 평균:

는 각각 for, while, foreach에 해당

0.1311650

0.1666853
0.1237440


반복 후 테스트 결과에 따르면 동일한 배열을 순회하는 경우 foreach가 가장 빠르고 가장 느린 것은 while입니다. foreach는 while보다 약 20% ~ 30% 빠릅니다. 그런 다음 배열 첨자를 500000과 5000000으로 늘리면 테스트 결과는 동일합니다. 그러나 원칙적인 관점에서 보면 foreach는 배열 복사본에서 작동하는 반면 while은 배열의 내부 인덱스를 이동하여 작동합니다. 일반적으로 foreach보다 while이 더 빠르다고 생각됩니다. foreach는 먼저 배열을 복사하고 while은 내부 포인터를 직접 이동하지만 결과는 정반대입니다. 그 이유는 foreach는 PHP의 내부 구현인 반면 while은 일반적인 루프 구조이기 때문입니다.

그래서 일반 애플리케이션에서는 간단하고 효율적인 foreach 형식을 사용하는 것을 선호합니다. PHP5에서는 foreach가 클래스 속성을 탐색할 수도 있습니다.

더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.