我正在为日历事件生成一个颜色列表,但我不希望每次刷新日历时颜色都改变。所以我想知道是否有一种方法可以每次都以相同的顺序生成颜色。
现在我用的是这样的:
function random_color()
{
return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}
您可以每次都用相同的种子初始化PRNG。这样,随机数序列将始终是相同的。看看http://www.php.net/manual/en/function.mt-srand.php
好吧,没有能够告诉你到底想做什么,这是我的建议。我假设您不希望它们在页面重新加载时改变。
那么,你能做的就是定义你的颜色并将它们存储在一个会话数组中…
try for instance:
$_SESSION['events_colors'][123] = array('color'=>random_color());
123将被您的事件ID取代,这样当您需要重新加载数据并显示您可以使用
访问存储的颜色时$_SESSION['events_colors'][123]['color']
$_SESSION['events_colors'][124]['color']
$_SESSION['events_colors'][125]['color']
$_SESSION['events_colors'][etc]['color']
希望有帮助。
您可以使用mt_srand()
作为随机数生成器的种子:
function random_color()
{
return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}
mts_rand(9000);
var_dump(
random_color(),
random_color(),
random_color()
);
例如:
- https://3v4l.org/5fNBd
参考:
- http://php.net/manual/en/function.mt-srand.php
或者,您可以使用fzaninotto/faker
生成您的随机颜色。库也允许播种Faker'Generator
,参见播种生成器:
您可能希望始终获得相同的生成数据-例如,当使用Faker进行单元测试时。该生成器提供了一个
seed()
方法,该方法为随机数生成器提供种子。使用相同的种子两次调用相同的脚本会产生相同的结果。
use Faker'Factory;
$faker = Factory::create();
$faker->seed(9000);
var_dump(
$faker->hexColor,
$faker->hexColor,
$faker->hexColor
);
参考:
- https://github.com/fzaninotto/Faker/tree/v1.7.1基本用法
- https://github.com/fzaninotto/Faker/tree/v1.7.1 fakerprovidercolor
- https://github.com/fzaninotto/Faker/tree/v1.7.1 seeding-the-generator