<?php
function balancedTagCloud(array $values, array $priorities): array
{
$low = min($priorities) - 1;
$high = max($priorities) - $low;
return array_map(
fn($v, $p) => sprintf(
'<h%1$d>%2$s</h%1$d>',
ceil(($p - $low) / $high * 6),
$v
),
$values,
$priorities
);
}
$artist = ["the roots", "michael jackson", "billy idol", "more", "and more", "and_YET_MORE"];
$counts = [
'original' => [5, 3, 9, 1, 1, 3],
'no_ones' => [5, 3, 9, 7, 7, 3],
'skewed' => [5, 3, 9, 7, 111, 3],
'all_same' => [5, 5, 5, 5, 5, 5],
'only_two' => [9, 20, 9, 20, 9, 20],
];
foreach ($counts as $count) {
echo implode("\n", balancedTagCloud($artist, $count));
echo "\n---\n";
}
preferences:
38.75 ms | 402 KiB | 5 Q