Файлы являются шрифтами, для них характерны имена типа FontName-type.extension
У меня есть все они в одной папке, в настоящее время у меня есть эта функция:
function random_font($dir = 'fonts')
{
$fonts = glob($dir . '/*');
return $fonts[devurandom_rand(0, count($fonts) - 1)];
}
Однако цель состоит в том, чтобы получить как можно более репрезентативную выборку, и шрифты с общим именем FontName намного больше похожи друг на друга, чем те, которые этого не делают.
Моя проблема заключается в случайном выборе шрифта таким образом, чтобы шрифты с общим именем FontName также разделяли вероятность выбора.
Сначала создайте массив, который сопоставляет имена шрифтов с их путями к файлам. Например, ваш оригинал $fonts
возможно:
// You already have this array from the glob function.
$fonts = [
'Helvetica',
'Helvetica-Bold',
'Times New Roman',
]
Затем переберите $fonts
массив для создания $fontNames
массив. $fontNames
массив сопоставляет имена шрифтов с именами файлов. В этом примере $fontNames
массив будет:
$fontNames = [
'Helvetica' => ['Helvetica', 'Helvetica-Bold'],
'Times New Roman' => ['Times New Roman'],
];
Затем вы можете выбрать случайный ключ из $fontNames
и в свою очередь выберите случайное значение.
Других решений пока нет …