<?php
$test_data_1k = array_fill( 0, 1000, 'X' );
function fastcount( &$array ) {
end($array);
$k = key($array);
reset($array);
return $k;
}
function bench( $reps, &$data, $callback ) {
$start_t = microtime(true);
ob_start();
for( $i = 0; $i < $reps; $i++ ) {
call_user_func( $callback, $data );
}
ob_end_clean();
$total_t = microtime(true) - $start_t;
return $total_t;
}
function while_each( &$data ) {
while( $i = each($data) ) {
echo $i[1];
}
}
function foreach_loop( &$data ) {
foreach( $data as &$item ) {
echo $item;
}
}
function indexed_foreach_loop( &$data ) {
foreach( $data as $i => &$x ) {
echo $data[$i];
}
}
function optimal_loop( &$data ) {
for( $i = 0, $max = count($data); $i < $max; $i++ ) {
echo $data[$i];
}
}
function inlined_fastcount( &$data ) {
end($data); $max = key($data);
for( $i = 0; $i <= $max; $i++ ) {
echo $data[$i];
}
}
function iterator_with_fastcount( &$data ) {
for( $i = 0; $i < fastcount($data); $i++ ) {
echo $data[$i];
}
}
function iterator_with_count( &$data ) {
for( $i = 0; $i < count($data); $i++ ) {
echo $data[$i];
}
}
echo 'Foreach: ' . bench( 10, $test_data_1k, 'foreach_loop' ) . "\n";
echo 'Indexed Foreach: ' . bench( 10, $test_data_1k, 'indexed_foreach_loop' ) . "\n";
echo 'Inlined FastCount: ' . bench( 10, $test_data_1k, 'inlined_fastcount' ) . "\n";
echo 'Optimal Loop: ' . bench( 10, $test_data_1k, 'optimal_loop' ) . "\n";
echo 'While-Each: ' . bench( 10, $test_data_1k, 'while_each' ) . "\n";
echo 'With FastCount: ' . bench( 10, $test_data_1k, 'iterator_with_fastcount' ) . "\n";
echo 'With Count: ' . bench( 10, $test_data_1k, 'iterator_with_count' ) . "\n";
preferences:
25.1 ms | 402 KiB | 5 Q