언어/PHP

PHP - foreach vs array_map 성능 비교 및 사용 예제 설명

[좋은사람] 2018. 1. 23. 22:32

PHP - foreach, array_map 기본 설명

 

PHP : foreach -> 배열을 순회하며 정의한 프로세스를 실행하는 함수

 PHP : array_map -> 배열의 각 원소에 사용자가 정의한 함수를 적용하여 결과를 반환하는 함수

③ stackoverflow 등 여러 포럼에서 두 함수에 대한 벤치마크 테스트에 대한 많은 이슈가 있어서 테스트를 수행했습니다.

④ 수행 결과 PHP 버전, xdebug 활성유무, 클로저 호출 유무 등에 따라 상이한 결과가 나올 것으로 예상됩니다.

    - 결론은 프로그램 로직에 맞는 적절한 함수를 사용하는 것이 적절하다고 생각합니다.

    - 단, PHP7 버전에서는 코드 캐싱 및 최적화 기능으로 인해 더욱 빠른 수행 시간을 확인할 수 있었습니다.




PHP - foreach 성능 테스트


전체 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
$arrayOfNumbers = array();
 
function get_time() {
    list($usec$sec= explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
 
for($i=1$i<= 10000++$i) {
    $arrayOfNumbers[] = rand(199999);
}
 
//Heap 선언
$maxHeap = new SplMaxHeap ();
$start = get_time();
 
//foreach 테스트
foreach($arrayOfNumbers as $number) {
    $maxHeap->insert($number);
}
 
$end = get_time();
 
$time = $end - $start;
 
echo 'foreach -> Avg Time: '.$time.'<br/><br/>';
 
 
?>
cs


실제 실행 화면




PHP - array_map 성능 테스트


전체 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
 
$arrayOfNumbers = array();
 
function get_time() {
    list($usec$sec= explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
 
for($i=1$i<= 10000++$i) {
    $arrayOfNumbers[] = rand(199999);
}
 
//Heap 선언
$maxHeap = new SplMaxHeap ();
 
$start = get_time();
 
//array_map 테스트
array_map(array($maxHeap'insert'), $arrayOfNumbers);
 
$end = get_time();
 
$time = $end - $start;
 
echo 'array_map -> Avg Time: '.$time;
 
?>
cs


실제 실행 화면




PHP - 소스코드 다운로드

 

php_test.zip



간단한 테스트이므로, PHP 버전, 하드웨어 사양 등에 대한 기술은 생략했습니다.