<?php
function generate($array) { // 1 loop over data
foreach ($array as $v) {
yield 'key' . $v => 'value' . $v;
}
}
function generator($array) { // 1 parent loop over data
return iterator_to_array(generate($array));
}
function construct($array) { // 1 loop over data
$result = [];
foreach ($array as $v) {
$result['key' . $v] = 'value' . $v;
}
return $result;
}
function mapCombine($array) { // 3 loops over data
return array_combine(
array_map(
fn($v) => 'key' . $v,
$array
),
array_map(
fn($v) => 'value' . $v,
$array
),
);
}
function mapFlatten($array) { // 3 loops over data
return array_merge(
...array_map(
fn($v) => ['key' . $v => 'value' . $v],
$array
),
);
}
function mapUncolumn($array) { // 2 loops over data
return array_column(
array_map(
fn($v) => ['key' . $v, 'value' . $v],
$array
),
1,
0
);
}
function walk($array) { // 1 loop over data
$result = [];
array_walk(
$array,
function($v) use (&$result) {
$result['key' . $v] = 'value' . $v;
}
);
return $result;
}
function reduce($array) { // 1 loop over data
return array_reduce(
$array,
function($result, $v) {
$result['key' . $v] = 'value' . $v;
return $result;
},
new ArrayObject()
);
}
function returnTime(callable $function, int $repeat = 20)
{
$tests = [];
for ($i = 0; $i < $repeat; ++$i) {
$startTime = microtime(true);
$function();
$endTime = microtime(true);
$tests[] = $endTime - $startTime;
}
// Representing the average
return 1000 * array_sum($tests) / $repeat;
}
$array = range(0, 5000);
foreach (['generator', 'construct', 'mapCombine', 'mapFlatten', 'mapUncolumn', 'walk', 'reduce'] as $test) {
echo "Duration of $test: ", returnTime(fn() => $test($array)) . PHP_EOL;
}
preferences:
36.47 ms | 414 KiB | 5 Q