我如何生成随机的颜色,但总是以相同的顺序


How can I generate random colors, but always in the same order?

我正在为日历事件生成一个颜色列表,但我不希望每次刷新日历时颜色都改变。所以我想知道是否有一种方法可以每次都以相同的顺序生成颜色。

现在我用的是这样的:

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