从文件夹中选择一个随机文件,根据名称分配概率


Select a random file from folder, distribute probability based on name

这些文件是字体,它们通常具有类似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中选择一个随机键,进而选择一个随机值。