Выберите случайный файл из папки, распределите вероятность по имени

Файлы являются шрифтами, для них характерны имена типа FontName-type.extension

У меня есть все они в одной папке, в настоящее время у меня есть эта функция:

function random_font($dir = 'fonts')
{
$fonts = glob($dir . '/*');
return $fonts[devurandom_rand(0, count($fonts) - 1)];
}

Однако цель состоит в том, чтобы получить как можно более репрезентативную выборку, и шрифты с общим именем FontName намного больше похожи друг на друга, чем те, которые этого не делают.

Моя проблема заключается в случайном выборе шрифта таким образом, чтобы шрифты с общим именем FontName также разделяли вероятность выбора.

1

Решение

Сначала создайте массив, который сопоставляет имена шрифтов с их путями к файлам. Например, ваш оригинал $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 и в свою очередь выберите случайное значение.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]