IchHabRecht icon

[PHP] Benchmark array functions

IchHabRecht | PRO | 02/26/14 09:02:22 PM UTC | 0 ⭐ | 375 👁️ | Never ⏰ | []
PHP |

2.8 KB

|

None

|

0 👍

/

0 👎

<?php
 
$runs = 10000;
 
function benchmark1() {
    global $runs;
 
    for ($i = 0; $i < $runs; $i++) {
        $array = array_fill(0, 10, 'array');
        $arrayCount = count($array);
        for ($j = 0; $j < $arrayCount; $j++) {
            $dummy = $j . ' => ' . $array[$j];
        }
    }
}
 
function benchmark2() {
    global $runs;
 
    for ($i = 0; $i < $runs; $i++) {
        $array = array_fill(0, 10, 'array');
        foreach ($array as $key => $value) {
            $dummy = $key . ' => ' . $value;
        }
        unset($key, $value);
    }
}
 
function benchmark3() {
    global $runs;
 
    $dummy = '';
    $function = function ($value) use ($dummy) {
        $dummy = $value;
    };
 
    for ($i = 0; $i < $runs; $i++) {
        $array = array_fill(0, 10, 'array');
        array_map($function, $array);
    }
}
 
function benchmark4() {
    global $runs;
 
    $dummy = '';
    $function = function ($value) use ($dummy) {
        $dummy = $value;
    };
 
    for ($i = 0; $i < $runs; $i++) {
        $array = array_fill(0, 10, 'array');
        array_walk($array, $function);
    }
}
 
function run_benchmark($benchmarkFunction) {
    $start_time = microtime(TRUE);
 
    call_user_func($benchmarkFunction);
 
    $end_time = microtime(TRUE);
 
    return $end_time - $start_time;
}
 
function run_benchmark_times($benchmarkFunction, $times = 10) {
    $totalTime = 0;
    $benchmark = '';
    for ($i = 0; $i < $times; ++$i) {
        $runTime = run_benchmark($benchmarkFunction);
        $benchmark .= $i . ': ' . $runTime . '<br />';
        $totalTime += $runTime;
    }
    $averageTime = $totalTime / $times;
    $benchmark .= 'Average:' . $averageTime . '<br />';
 
    return $benchmark;
}
 
echo 'for:<br />' . run_benchmark_times('benchmark1') . '<br /><br />';
 
echo 'foreach:<br />' . run_benchmark_times('benchmark2') . '<br /><br />';
 
echo 'array_map:<br />' . run_benchmark_times('benchmark3') . '<br /><br />';
 
echo 'array_walk:<br />' . run_benchmark_times('benchmark4') . '<br /><br />';
 
 
 
for:
0: 1.0302460193634
1: 0.65146803855896
2: 0.66136193275452
3: 0.64415311813354
4: 0.6526780128479
5: 0.6699538230896
6: 0.66441917419434
7: 0.64700198173523
8: 0.67700600624084
9: 0.65721106529236
Average:0.69554991722107
 
 
foreach:
0: 0.52113389968872
1: 0.51127409934998
2: 0.52082180976868
3: 0.54333400726318
4: 0.5436429977417
5: 0.48052191734314
6: 0.45839810371399
7: 0.46226000785828
8: 0.49614500999451
9: 0.53473901748657
Average:0.50722708702087
 
 
array_map:
0: 4.6220200061798
1: 4.6417779922485
2: 4.5292210578918
3: 4.6383039951324
4: 4.688591003418
5: 5.0692970752716
6: 4.909529209137
7: 5.1962251663208
8: 5.9621770381927
9: 7.1543881893158
Average:5.1411530733109
 
 
array_walk:
0: 6.82506108284
1: 5.1182498931885
2: 5.0953998565674
3: 7.288468837738
4: 6.3256978988647
5: 5.2610161304474
6: 6.2699329853058
7: 5.3987231254578
8: 6.5060670375824
9: 5.9784679412842
Average:6.0067084789276

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎