<?php
$array = [2,2,2,1,1,0,0,8];
$values_cache = [];
usort($array, function ($a, $b) use (&$values_cache) {
$key_a = isset($values_cache[$a]) ? $values_cache[$a] : ($values_cache[$a] = keyfn($a));
$key_b = isset($values_cache[$b]) ? $values_cache[$b] : ($values_cache[$b] = keyfn($b));
return $key_a <=> $key_b;
});
echo '<pre>', print_r($array), '</pre>'; // TODO
function keyfn($v) {
echo 'call a keyfn' . PHP_EOL;
return 2 * $v;
}
preferences:
28.11 ms | 402 KiB | 5 Q