<?php
/**
* @param array $functions An associative array of closures to benchmark
* @param int $iterations The number of iterations
*/
function benchmark($functions, $iterations)
{
foreach ($functions as $name => $function) {
$start = microtime(true);
for ($i = 0; $i < $iterations; $i++) {
call_user_func($function);
}
$delta = microtime(true) - $start;
echo "$name: " . $delta . "\n";
}
}
echo "\nBenchmarking \"(array) \$var === \$var\" vs \"is_array(\$var)\" ...\n";
$data = array(
'string', // Not an array
array(1, 2, 3), // Small array
array_fill(1, 1000, uniqid()) // Large-ish array
);
benchmark(array(
'casting' => function () use ($data) {
foreach ($data as $d) {
$result = (array) $d === $d;
}
},
'is_array' => function () use ($data) {
foreach ($data as $d) {
$result = is_array($d);
}
}
), 1000);
echo "\nBenchmarking \"count(\$var) == 0\" vs \"empty(\$var)\" ...\n";
$data = range(1, 100000);
benchmark(array(
'count()' => function () use ($data) {
$result = count($data) == 0;
},
'empty()' => function () use ($data) {
$result = empty($data);
}
), 100000);
echo "\nBenchmarking \"array_key_exists(\$key, \$array)\" vs \"\$array[\$key]\" ...\n";
$data = array_fill_keys(range(1, 1000), uniqid());
benchmark(array(
'in_array_keys()' => function () use ($data) {
$result = array_key_exists(50, $data) ? : null;
},
'key check' => function () use ($data) {
$result = $data[50] ? : null;
}
), 100000);
preferences:
33.08 ms | 402 KiB | 5 Q