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

时间:2014-05-20 16:43:59

标签: php random colors

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

现在我正在使用这样的东西:

function random_color() 
{
    return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT);
}

3 个答案:

答案 0 :(得分:0)

您可以每次使用相同的种子初始化PRNG。这样,随机数序列将始终相同。 看看http://www.php.net/manual/en/function.mt-srand.php

答案 1 :(得分:0)

好吧,如果不能确切地说出你想要做什么,这是我的建议。我假设你不希望他们改变页面重新加载。

所以,您可以做的是定义颜色并将它们存储在会话数组中......

尝试例如:

$_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']

希望这会有所帮助。

答案 2 :(得分:0)

您可以使用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()
);

有关示例,请参阅:

供参考,见:

或者,您可以使用fzaninotto/faker生成随机颜色。该库也可以为Faker\Generator播种,请参阅Seeding the Generator

  

您可能希望始终获得相同的生成数据 - 例如,在使用Faker进行单元测试时。生成器提供seed()方法,该方法为随机数生成器提供种子。使用相同的种子调用相同的脚本两次会产生相同的结果。

use Faker\Factory;

$faker = Factory::create();
$faker->seed(9000);

var_dump(
    $faker->hexColor,
    $faker->hexColor,
    $faker->hexColor
);

供参考,见: